应用程序发布和客户端交互

本文提供有关常见 App-V 客户端操作及其与本地操作系统集成的技术信息。

有关其他参考信息,请参阅 Microsoft Application Virtualization (App-V) 文档资源下载页

Sequencer 创建的 App-V 包文件

Sequencer 创建 App-V 包并生成虚拟化应用程序。 排序过程创建以下文件:

文件 说明

.appv

  • 主包文件,其中包含从排序过程中捕获的资产和状态信息。

  • 包文件、发布信息和注册表的体系结构,以标记化的形式提供,可在交付时重新应用于计算机和特定用户。

.MSI

可用于手动部署 .appv 文件或使用第三方部署平台的可执行部署包装器。

_DeploymentConfig.XML

用于为包中的所有应用程序自定义默认发布参数的文件,该包全局部署到运行 App-V 客户端的计算机上的所有用户。

_UserConfig.XML

用于自定义包中所有应用程序的发布参数的文件,该包是部署到运行 App-V 客户端的计算机上的特定用户的。

Report.xml

排序过程生成的消息摘要,包括省略的驱动程序、文件和注册表位置。

.CAB

选: 用于自动重新生成以前排序的虚拟应用程序包的包加速器文件。

.appvt

选: 用于保留通常重复使用的 Sequencer 设置的 Sequencer 模板文件。

有关排序的信息,请参阅 Application Virtualization 5.0 序列化指南

appv 文件中有什么?

appv 文件是一个容器,用于将 XML 和非 XML 文件存储在单个实体中。 此文件基于 AppX 格式生成,该格式基于开放打包约定 (OPC) 标准。

若要查看 appv 文件内容,请创建包的副本,然后将复制的文件重命名为 ZIP 扩展名。

appv 文件包含以下文件夹和文件,在创建和发布虚拟应用程序时会使用这些文件夹和文件:

名称 类型 说明

文件夹

包含序列化期间捕获的虚拟化应用程序的文件系统的目录。

[Content_Types].xml

XML 文件

appv 文件中的核心内容类型列表 (e.g. DLL、EXE、BIN) 。

AppxBlockMap.xml

XML 文件

appv 文件的布局,它使用 File、Block 和 BlockMap 元素来启用 App-V 包中文件的位置和验证。

AppxManifest.xml

XML 文件

包的元数据,其中包含添加、发布和启动包所需的信息。 包括扩展点 (文件类型关联和快捷方式) 以及与包关联的名称和 GUID。

FilesystemMetadata.xml

XML 文件

在排序期间捕获的文件列表,包括 (属性,例如目录、文件、不透明目录、空目录以及) 的长名称和短名称。

PackageHistory.xml

XML 文件

有关计算机排序的信息 (操作系统版本、Internet Explorer 版本、.Net Framework 版本) 和进程 (升级、包版本) 。

Registry.dat

DAT 文件

在包的排序过程中捕获的注册表项和值。

StreamMap.xml

XML 文件

主要功能和发布功能块的文件列表。 发布功能块包含用于发布包的 ICO 文件和文件 (EXE 和 DLL) 所需的部分。 如果存在,则主要功能块包括已在排序过程中针对流式处理进行了优化的文件。

App-V 客户端数据存储位置

App-V 客户端执行任务以确保虚拟应用程序正常运行,并像本地安装的应用程序一样工作。 打开和运行虚拟应用程序的过程需要从虚拟文件系统和注册表进行映射,以确保应用程序具有用户期望的传统应用程序所需的组件。 本部分介绍运行虚拟应用程序所需的资产,并列出 App-V 存储资产的位置。

名称 位置 说明

包存储

%ProgramData%\App-V

只读包文件的默认位置

计算机目录

%ProgramData%\Microsoft\AppV\Client\Catalog

包含每台计算机配置文档

用户目录

%AppData%\Microsoft\AppV\Client\Catalog

包含每用户配置文档

快捷方式备份

%AppData%\Microsoft\AppV\Client\Integration\ShortCutBackups

存储对包取消发布启用还原的以前的集成点

写入时复制 (COW) 漫游

%AppData%\Microsoft\AppV\Client\VFS

包修改的可写漫游位置

写入时复制 (COW) 本地

%LocalAppData%\Microsoft\AppV\Client\VFS

用于包修改的可写非漫游位置

计算机注册表

HKLM\Software\Microsoft\AppV

包含包状态信息,包括计算机或全局发布的包的 VReg (计算机配置单元)

用户注册表

HKCU\Software\Microsoft\AppV

包含用户包状态信息,包括 VReg

用户注册表类

HKCU\Software\Classes\AppV

包含其他用户包状态信息

下表和整个文档中提供了该表的其他详细信息。

包存储

App-V 客户端管理在包存储中装载的应用程序资产。 此默认存储位置为 %ProgramData%\App-V,但可以在设置过程中或安装后使用 PowerShell 命令对其进行配置,该命令修改 Set-AppVClientConfiguration 本地注册表 (PackageInstallationRoot 项) 下 HKLM\Software\Microsoft\AppV\Client\Streaming 的值。 包存储必须位于客户端操作系统上的本地路径。 各个包存储在包存储中,该子目录中名为“包 GUID”和“版本 GUID”。

特定应用程序的路径示例:

C:\ProgramData\App-V\PackGUID\VersionGUID

若要在安装过程中更改包存储的默认位置,请参阅 如何部署 App-V 客户端

共享内容存储

如果在共享内容存储模式下配置 App-V 客户端,则发生流故障时不会将任何数据写入磁盘,这意味着包 (发布数据) 所需的本地磁盘空间最小。 在 VDI 环境中,非常希望使用更少的磁盘空间,因为本地存储可能会受到限制,并且最好从高性能网络位置 ((例如 SAN) )流式传输应用程序。 有关共享内容存储模式的详细信息,请参阅 https://go.microsoft.com/fwlink/p/?LinkId=392750

注意 计算机和包存储必须位于本地驱动器上,即使对 App-V 客户端使用共享内容存储配置也是如此。

包目录

App-V 客户端管理以下两个基于文件的位置:

  • 目录 (用户和计算机) 。

  • 注册表位置 - 取决于包的发布目标。 计算机有一个目录 (数据存储) ,每个用户都有一个目录。 计算机目录存储适用于所有用户或任何用户的全局信息,用户目录存储适用于特定用户的信息。 目录是动态配置和清单文件的集合;每个包版本的文件和注册表都有离散数据。 

计算机目录

说明

在添加和发布包时,存储计算机上用户可用的包文档。 但是,如果包在发布时是“全局的”,则集成可供所有用户使用。

如果包是非全局的,则集成仅针对特定用户发布,但仍有全局资源已修改,并且对客户端计算机上的任何人可见 (例如,包目录位于共享磁盘位置) 。

如果计算机上的用户可以使用包 (全局或非全局) ,则清单存储在计算机目录中。 全局发布包时,计算机目录中存储有一个动态配置文件;因此,根据计算机目录中是否存在策略文件 (UserDeploymentConfiguration 文件) ,确定包是否为全局。

默认存储位置

%programdata%\Microsoft\AppV\Client\Catalog</code>

此位置与包存储位置不同。 包存储是包文件的黄金或原始副本。

计算机目录中的文件

  • Manifest.xml

  • DeploymentConfiguration.xml

  • UserManifest.xml (全局发布的包)

  • UserDeploymentConfiguration.xml (全局发布的包)

其他计算机目录位置,当包是连接组的一部分时使用

以下位置是上述特定包位置的补充:

%programdata%\Microsoft\AppV\Client\Catalog\PackageGroups\ConGroupGUID\ConGroupVerGUID

当包属于连接组时,计算机目录中的其他文件

  • PackageGroupDescriptor.xml

  • UserPackageGroupDescriptor.xml (全局发布的连接组)

用户目录

说明

在发布过程中创建。 包含用于发布包的信息,并在启动时也用于确保将包预配到特定用户。 在漫游位置创建并包含特定于用户的发布信息。

为用户发布包时,策略文件存储在用户目录中。 同时,清单的副本也存储在用户目录中。 删除用户的包权利后,相关包文件将从用户目录中删除。 查看用户目录,管理员可以查看动态配置文件的存在,该文件指示该用户有权使用该包。

对于漫游用户,用户目录需要位于漫游或共享位置,以保留默认面向用户的旧 App-V 行为。 权利和策略与用户(而不是计算机)相关联,因此在预配后,他们应与用户一起漫游。

默认存储位置

appdata\roaming\Microsoft\AppV\Client\Catalog\Packages\PkgGUID\VerGUID

用户目录中的文件

  • UserManifest.xml

  • DynamicConfiguration.xml 或 UserDeploymentConfiguration.xml

其他用户目录位置,当包是连接组的一部分时使用

以下位置是上述特定包位置的补充:

appdata\roaming\Microsoft\AppV\Client\Catalog\PackageGroups\PkgGroupGUID\PkgGroupVerGUID

当包属于连接组时,计算机目录中的其他文件

UserPackageGroupDescriptor.xml

快捷方式备份

在发布过程中,App-V 客户端会将所有快捷方式和集成点备份到 %AppData%\Microsoft\AppV\Client\Integration\ShortCutBackups. 此备份,使这些集成点可以在包取消发布时将这些集成点还原到以前的版本。

写入文件时复制

包存储包含从发布服务器流式传输的包文件的原始副本。 在 App-V 应用程序的正常操作期间,用户或服务可能需要更改文件。 这些更改不会在包存储中进行,目的是保留修复应用程序的能力,这会删除这些更改。 这些位置称为“写入时复制 (COW) ”,支持漫游和非漫游位置。 修改的存储位置取决于在本机体验中对应用程序进行编程以写入更改的位置。

COW 漫游

上述 COW 漫游位置存储针对典型 %AppData% 位置或 \Users\{username}\AppData\Roaming 位置的文件和目录的更改。 然后,根据操作系统设置漫游这些目录和文件。

COW 本地

COW 本地位置类似于漫游位置,但目录和文件不会漫游到其他计算机,即使已配置漫游支持也是如此。 上述 COW 本地位置存储适用于典型窗口的更改,而不是 %AppData% 位置。 列出的目录会有所不同,但任何典型的 Windows 位置 (将有两个位置,例如 Common AppData 和 Common AppDataS) 。 当虚拟服务以与登录用户不同的提升用户身份请求更改时, S 表示受限位置。 非 S 位置存储基于用户的更改。

包注册表

在应用程序可以访问包注册表数据之前,App-V 客户端必须将包注册表数据提供给应用程序。 App-V 客户端使用真实注册表作为所有注册表数据的后备存储。

将新包添加到 App-V 客户端时,注册表的副本。包中的 DAT 文件在 %ProgramData%\Microsoft\AppV\Client\VREG\{Version GUID}.dat上创建。 文件的名称是带有 的版本 GUID。DAT 扩展。 创建此副本的原因是确保包中的实际配置单元文件永远不会被使用,这将阻止在以后删除包。

从包存储区Registry.dat

 > 

%ProgramData%\Microsoft\AppV\Client\Vreg{VersionGuid}.dat

在客户端上启动包中的第一个应用程序时,客户端会暂存或复制 hive 文件中的内容,并在备用位置 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppV\Client\Packages\PackageGuid\Versions\VersionGuid\REGISTRY重新创建包注册表数据。 暂存注册表数据具有两种不同类型的计算机数据和用户数据。 计算机数据在计算机上的所有用户之间共享。 将每个用户的用户数据暂存到用户特定位置 HKCU\Software\Microsoft\AppV\Client\Packages\PackageGuid\Registry\User。 最终会在包删除时删除计算机数据,并在用户取消发布操作时删除用户数据。

包注册表暂存与连接组注册表暂存

存在连接组时,注册表暂存的上一个过程为 true,但有多个配置单元文件要处理,而不是一个配置单元文件。 文件按在连接组 XML 中的显示顺序进行处理,第一个写入器将赢得任何冲突。

暂存注册表的保留方式与在单个包案例中相同。 暂存的用户注册表数据将保留连接组,直到它被禁用为止;删除连接组时会删除暂存的计算机注册表数据。

虚拟注册表

虚拟注册表 (VREG) 的目的是为应用程序提供包注册表和本机注册表的单个合并视图。 它还提供写入时复制 (COW) 功能 , 即从虚拟进程的上下文对注册表所做的任何更改都对单独的 COW 位置进行更改。 这意味着 VREG 必须基于注册表 COW - 包> -> 本机中填充的位置,将最多三个单独的注册表位置合并到单个视图中。 当对注册表数据发出请求时,它将按顺序查找,直到找到所请求的数据。 这意味着,如果某个值存储在 COW 位置中,则它不会转到其他位置;但是,如果 COW 位置中没有数据,则它会继续访问包,然后是本机位置,直到找到相应的数据。

注册表位置

App-V 客户端存储注册表信息的两个包注册表位置和两个连接组位置,具体取决于包是单独发布还是作为连接组的一部分发布。 包有三个 COW 位置,三个用于连接组,这些位置由 VREG 创建和管理。 不共享包和连接组的设置:

单包 VReg:

位置

Description

  • 计算机注册表\Client\Packages\PkgGUID\REGISTRY (只有提升进程才能写入)

  • 用户注册表\客户端\Packages\PkgGUID\REGISTRY (HKCU 下写入的任何用户漫游,但 Software\Classs 除外

  • 用户注册表类\Client\Packages\PkgGUID\REGISTRY (HKCU\Software\Classes 针对非提升的进程写入和 HKLM)

  • Machine Registry\Client\Packages\PkgGUID\Versions\VerGuid\Registry\Machine

  • 用户注册表类\Client\Packages\PkgGUID\Versions\VerGUID\Registry

本地

  • 本机应用程序注册表位置

连接组 VReg:

位置

Description

  • 计算机注册表\Client\PackageGroups\GrpGUID\REGISTRY (只有提升进程才能写入)

  • 用户注册表\Client\PackageGroups\GrpGUID\REGISTRY (除 Software\Classs 之外写入 HKCU 的任何内容

  • 用户注册表类\Client\PackageGroups\GrpGUID\REGISTRY

  • Machine Registry\Client\PackageGroups\GrpGUID\Versions\VerGUID\REGISTRY

  • 用户注册表类\Client\PackageGroups\GrpGUID\Versions\VerGUID\REGISTRY

本地

  • 本机应用程序注册表位置

HKLM 有两个 COW 位置:提升的进程和非提升的进程。 提升的进程始终将 HKLM 更改写入 HKLM 下的安全 COW。 非提升的进程始终将 HKLM 更改写入 HKCU\Software\Classes 下的非安全 COW。 当应用程序从 HKLM 读取更改时,提升的进程将从 HKLM 下的安全 COW 读取更改。 两者的非提升读取,优先于在不安全的 COW 中所做的更改。

传递密钥

传递密钥使管理员能够配置某些密钥,以便只能从本机注册表中读取它们,从而绕过包和 COW 位置。 传递位置是计算机的全局位置, (不打包特定的) ,并且可以通过将路径添加到密钥进行配置,该路径应被视为传递到密钥 HKLM\Software\Microsoft\AppV\Subsystem\VirtualRegistry的名为 PassThroughPathsREG_MULTI_SZ值。 此多字符串值下出现的任何键 (及其子) 将被视为传递。

默认情况下,以下位置配置为传递位置:

  • HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel

  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger

  • HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

  • HKEY_LOCAL_MACHINE\SOFTWARE\Policies

  • HKEY_CURRENT_USER\SOFTWARE\Policies

传递密钥的用途是确保虚拟应用程序不会在 VReg 中写入非虚拟应用程序成功操作或集成所需的注册表数据。 策略密钥可确保使用管理员设置的基于组策略的设置,而不是按包设置使用。 与基于 Windows 新式 UI 的应用程序集成需要 AppModel 密钥。 建议管理员不要修改任何默认传递密钥,但在某些情况下,根据应用程序行为可能需要添加其他传递密钥。

App-V 包存储行为

App-V 5 管理包存储区,这是存储 appv 文件中扩展的资产文件的位置。 默认情况下,此位置存储在 %ProgramData%\App-V 上,并且仅受可用磁盘空间的存储功能限制。 包存储区由包和版本的 GUID 组织,如上一部分所述。

添加包

使用 App-V 客户端将 App-V 包添加到计算机后暂存。 App-V 客户端提供按需过渡。 在发布或手动 Add-AppVClientPackage 期间,数据结构在包存储中生成, (c:\programdata\App-V\{PkgGUID}\{VerGUID}) 。 StreamMap.xml 中定义的发布块中标识的包文件将添加到系统中,并暂存顶级文件夹和子文件,以确保在启动时存在适当的应用程序资产。

装载包

可以使用 PowerShell Mount-AppVClientPackage 或使用 App-V 客户端 UI 显式加载包来下载包。 此操作会将整个包完全加载到包存储中。

流式处理包

可以将 App-V 客户端配置为更改流式处理的默认行为。 所有流式处理策略都存储在以下注册表项下: HKEY_LOCAL_MAcHINE\Software\Microsoft\AppV\Client\Streaming。 使用 PowerShell cmdlet Set-AppvClientConfiguration设置策略。 以下策略适用于流式处理:

策略 描述

AllowHighCostLaunch

在Windows 8,它允许通过 3G 和手机网络进行流式传输

自动加载

指定后台加载设置:

0 - 已禁用

1 - 仅以前使用的包

2 - 所有包

PackageInstallationRoot

本地计算机中包存储的根文件夹

PackageSourceRoot

应从中流式传输包的根替代

SharedContentStoreMode

允许将共享内容存储用于 VDI 方案

这些设置会影响将 App-V 包资产流式传输到客户端的行为。 默认情况下,App-V 仅在下载初始发布和主要功能块后下载所需的资产。 必须解释流式处理包的三种特定行为:

  • 后台流式处理

  • 优化的流式处理

  • 流故障

后台流式处理

PowerShell cmdlet Get-AppvClientConfiguration 可用于使用自动加载设置确定后台流式传输的当前模式,并使用 cmdlet Set-AppvClientConfiguration 或从注册表 (HKLM\SOFTWARE\Microsoft\AppV\ClientStreaming 密钥) 进行修改。 后台流式处理是默认设置,其中“自动加载”设置设置为下载以前使用的包。 基于默认设置 (value=1 的行为,) 应用程序启动后在后台下载 App-V 数据块。 可以一起禁用此设置, (value=0) ,也可以为 (value=2) 的所有包启用此设置,无论它们是否已启动。

优化的流式处理

可以在排序期间使用主要功能块配置 App-V 包。 此设置允许排序工程师监视特定应用程序或应用程序的启动文件,并标记 App-V 包中的数据块,以便在首次启动包中的任何应用程序时进行流式处理。

流错误

在任何发布数据的初始流和主要功能块之后,对其他文件的请求将执行流错误。 这些数据块将根据需要下载到包存储区。 这允许用户仅下载包的一小部分,通常足以启动包并运行正常任务。 当用户启动需要当前不在包存储中的数据的操作时,将下载所有其他块。

有关 App-V 包流式处理的详细信息,请访问: https://go.microsoft.com/fwlink/?LinkId=392770

流式处理优化的排序可在以下位置获取: https://go.microsoft.com/fwlink/?LinkId=392771

包升级

App-V 包需要在应用程序的整个生命周期内进行更新。 App-V 包升级类似于包发布操作,因为每个版本都将在其自己的 PackageRoot 位置创建: %ProgramData%\App-V\{PkgGUID}\{newVerGUID}。 升级操作是通过从同一包的其他版本创建指向相同和流式文件的硬链接来优化的。

包删除

删除包时 App-V 客户端的行为取决于用于删除的方法。 使用 App-V 完整基础结构取消发布应用程序,将删除全局发布应用程序的用户目录文件 (计算机目录) ,但会保留包存储位置和 COW 位置。 使用 PowerShell cmdlet Remove-AppVClientPackge 删除 App-V 包时,会清理包存储位置。 请记住,从管理服务器取消发布 App-V 包不会执行删除操作。 这两个操作都不会删除包存储包文件。

漫游注册表和数据

App-V 5 能够在漫游时提供近乎本机的体验,具体取决于所使用的应用程序的编写方式。 默认情况下,App-V 根据操作系统的漫游配置来漫游存储在漫游位置的 AppData。 用于存储基于文件的数据的其他位置不会从计算机漫游到计算机,因为它们位于未漫游的位置。

漫游要求和用户目录数据存储

App-V 以以下形式存储表示用户目录状态的数据:

  • %appdata%\Microsoft\AppV\Client\Catalog 下的文件

  • 下的注册表设置 HKEY_CURRENT_USER\Software\Microsoft\AppV\Client\Packages

这些文件和注册表设置共同表示用户的目录,因此两者都必须漫游,或者两者都不能为给定用户漫游。 App-V 不支持漫游 %AppData%,但不支持漫游用户的配置文件 (注册表) ,反之亦然。

注意Repair-AppvClientPackage cmdlet 不会修复包的发布状态,其中用户下的 HKEY_CURRENT_USER App-V 状态缺失或与 %appdata% 中的数据不匹配。

基于注册表的数据

App-V 注册表漫游分为两种情况,如下表所示。

方案 说明

以标准用户身份运行的应用程序

当标准用户启动 App-V 应用程序时,适用于 App-V 应用程序的 HKLM 和 HKCU 都存储在计算机上的 HKCU 配置单元中。 这表示为两个不同的路径:

  • HKLM:HKCU\SOFTWARE\Classes\AppV\Client\Packages{PkgGUID}\REGISTRY\MACHINE\SOFTWARE

  • HKCU:HKCU\SOFTWARE\Microsoft\AppV\Client\Packages{PkgGUID}\REGISTRY\USER{UserSID}\SOFTWARE

根据操作系统设置启用这些位置进行漫游。

以提升方式运行的应用程序

当应用程序以提升启动时:

  • HKLM 数据存储在本地计算机上的 HKLM 配置单元中

  • HKCU 数据存储在用户注册表位置

在此方案中,这些设置不会使用正常的操作系统漫游配置进行漫游,并且生成的注册表项和值存储在以下位置:

  • HKLM\SOFTWARE\Microsoft\AppV\Client\Packages{PkgGUID}{UserSID}\REGISTRY\MACHINE\SOFTWARE

  • HKCU\SOFTWARE\Microsoft\AppV\Client\Packages{PkgGUID}\Registry\User{UserSID}\SOFTWARE

App-V 和文件夹重定向

App-V 5.0 SP2 支持漫游 AppData 文件夹的文件夹重定向 (%AppData%) 。 虚拟环境启动时,用户的漫游 AppData 目录中的漫游 AppData 状态将复制到本地缓存。 相反,当虚拟环境关闭时,与特定用户的漫游 AppData 关联的本地缓存将传输到该用户的漫游 AppData 目录的实际位置。

典型的包在用户的后备存储中映射了多个位置,用于 AppData\Local 和 AppData\Roaming 中的设置。 这些位置是写入时复制位置,每个用户存储在用户配置文件中,用于存储对包 VFS 目录所做的更改和保护默认包 VFS。

下表显示了尚未实现文件夹重定向时的本地和漫游位置。

包中的 VFS 目录 后备存储的映射位置

ProgramFilesX86

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\ProgramFilesX86

SystemX86

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\SystemX86

Windows

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\Windows

appv_ROOT

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\appv_ROOT

AppData

C:\users\jsmith\AppData<strong>Roaming\Microsoft\AppV\Client\VFS<GUID>\AppData

下表显示了本地和漫游位置,如果为 %AppData 实现了文件夹重定向,并且位置已重定向 (通常重定向到网络位置) 。

包中的 VFS 目录 后备存储的映射位置

ProgramFilesX86

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\ProgramFilesX86

SystemX86

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\SystemX86

Windows

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\Windows

appv_ROOT

C:\users\jsmith\AppData<strong>Local\Microsoft\AppV\Client\VFS<GUID>\appv_ROOT

AppData

\Fileserver\users\jsmith\roaming\Microsoft\AppV\Client\VFS<GUID>\AppData

当前的 App-V 客户端 VFS 驱动程序无法写入网络位置,因此 App-V 客户端在发布期间和虚拟环境启动时会检测是否存在文件夹重定向,并复制本地驱动器上的数据。 在用户关闭 App-V 应用程序且 App-V 客户端关闭虚拟环境后,VFS AppData 的本地存储将复制回网络,从而允许漫游到其他计算机,在该计算机上重复该过程。 流程的详细步骤如下:

  1. 在发布或虚拟环境启动期间,App-V 客户端会检测 AppData 目录的位置。

  2. 如果漫游 AppData 路径为本地或映射 ino AppData\Roaming 位置,则不会发生任何操作。

  3. 如果漫游 AppData 路径不是本地的,则 VFS AppData 目录将映射到本地 AppData 目录。

此过程解决了 App-V 客户端 VFS 驱动程序不支持的非本地 %AppData% 的问题。 但是,存储在此新位置中的数据不会通过文件夹重定向进行漫游。 应用程序运行期间的所有更改都发生在本地 AppData 位置,必须复制到重定向位置。 此过程的详细步骤如下:

  1. App-V 应用程序已关闭,这会关闭虚拟环境。

  2. 漫游 AppData 位置的本地缓存将压缩并存储在 ZIP 文件中。

  3. ZIP 打包过程结束时的时间戳用于命名文件。

  4. 时间戳记录在注册表中:HKEY_CURRENT_USER\Software\Microsoft\AppV\Client\Packages\<GUID>\AppDataTime 作为最后一个已知的 AppData 时间戳。

  5. 调用文件夹重定向过程来评估并启动上传到漫游 AppData 目录的 ZIP 文件。

如果存在冲突,时间戳用于确定“最后写入者获胜”方案,并在发布 App-V 应用程序或启动虚拟环境时用于优化数据下载。 文件夹重定向将使数据可从支持策略涵盖的任何其他客户端获得,并将启动将 AppData\Roaming 数据存储到客户端上的本地 AppData 位置的过程。 详细过程包括:

  1. 用户通过启动应用程序来启动虚拟环境。

  2. 应用程序的虚拟环境会检查最新的时间戳 ZIP 文件(如果存在)。

  3. 检查注册表中是否有最后一个已知上传的时间戳(如果存在)。

  4. 除非本地上一个已知上传时间戳大于或等于 ZIP 文件中的时间戳,否则将下载最新的 ZIP 文件。

  5. 如果本地上一个已知上传时间戳早于漫游 AppData 位置中最新 ZIP 文件的时间戳,则 ZIP 文件将提取到用户配置文件中的本地临时目录。

  6. 成功提取 ZIP 文件后,将重命名漫游 AppData 目录的本地缓存,并将新数据移动到原地。

  7. 重命名的目录将被删除,应用程序将打开,其中包含最近保存的漫游 AppData 数据。

这将完成 AppData\Roaming 位置中存在的应用程序设置的成功漫游。 唯一必须解决的其他条件是包修复操作。 此过程的详细信息如下:

  1. 在修复期间,检测用户的漫游 AppData 目录的路径是否不是本地路径。

  2. 映射非本地漫游 AppData 路径目标将重新创建预期的漫游和本地 AppData 位置。

  3. 删除注册表中存储的时间戳(如果存在)。

此过程将重新创建 AppData 的本地和网络位置,并删除时间戳的注册表记录。

App-V 客户端应用程序生命周期管理

在 App-V 完整基础结构中,在对应用程序进行排序后,它们将通过 App-V 管理和发布服务器对其进行管理和发布到用户或计算机。 本部分详细介绍在常见 App-V 应用程序生命周期操作期间发生的操作, (添加、发布、启动、升级和删除) 以及从 App-V 客户端的角度更改和修改的文件和注册表位置。 App-V 客户端操作作为一系列在运行 App-V 客户端的计算机上启动的 PowerShell 命令执行。

本文档重点介绍 App-V 完整基础结构解决方案。 有关 App-V 与 Configuration Manager 2012 集成的具体信息,请参阅 App-V 支持的配置

App-V 应用程序生命周期任务在用户登录时触发, (默认) 、计算机启动或后台计时操作。 App-V 客户端操作的设置(包括发布服务器、刷新间隔、包脚本启用等)是在客户端安装期间或使用 PowerShell 命令在安装后配置的。 请参阅 TechNet 上的如何部署客户端部分: 如何部署 App-V 客户端 或使用 PowerShell:

get-command *appv*

发布刷新

发布刷新过程由在 App-V 客户端上执行的几个较小操作组成。 由于 App-V 是一种应用程序虚拟化技术,而不是任务计划技术,因此使用 Windows 任务计划程序在用户登录、计算机启动和按计划间隔启用进程。 将客户端分发到具有正确设置的一大组计算机时,在上述设置期间配置客户端是首选方法。 可以使用以下 PowerShell cmdlet 配置这些客户端设置:

  • Add-AppVPublishingServer: 使用提供 App-V 包的 App-V 发布服务器配置客户端。

  • Set-AppVPublishingServer: 修改 App-V 发布服务器的当前设置。

  • Set-AppVClientConfiguration: 修改 App-V 客户端的当前设置。

  • Sync-AppVPublishingServer: 手动启动 App-V 发布刷新过程。 这也用于在配置发布服务器期间创建的计划任务中。

以下部分的重点是详细介绍在 App-V 发布刷新的不同阶段发生的操作。 主题包括:

  • 添加 App-V 包

  • 发布 App-V 包

添加 App-V 包

将 App-V 包添加到客户端是发布刷新过程的第一步。 最终结果与 Add-AppVClientPackage PowerShell 中的 cmdlet 相同,但在发布刷新添加过程中,将联系配置的发布服务器,并将应用程序的高级列表传递回客户端,以拉取更详细的信息,而不是单个包添加操作。 该过程将继续,为包或连接组添加或更新配置客户端,然后访问 appv 文件。 接下来,appv 文件的内容将展开并放置在本地操作系统上的相应位置。 下面是该过程的详细工作流,假设包已针对错误流式处理进行配置。

如何添加 App-V 包

  1. 通过 PowerShell 或任务序列启动发布刷新过程手动启动。

    1. App-V 客户端建立 HTTP 连接,并根据目标请求应用程序列表。 发布刷新过程支持面向计算机或用户。

    2. App-V 发布服务器使用发起目标、用户或计算机的标识,并查询数据库中的授权应用程序列表。 应用程序列表作为 XML 响应提供,客户端使用该响应向服务器发送其他请求,以获取每个包的详细信息。

  2. App-V 客户端上的发布代理执行以下序列化的所有操作。

    评估任何未发布或禁用的连接组,因为无法处理属于连接组的包版本更新。

  3. 通过标识“添加”或“更新”操作来配置包。

    1. App-V 客户端利用 Windows 中的 AppX API,并从发布服务器访问 appv 文件。

    2. 将打开包文件,并将 AppXManifest.xml 和 StreamMap.xml 下载到包存储。

    3. 完全流式传输 StreamMap.xml 中定义的发布块数据。 将发布块数据存储在包存储\PkgGUID\VerGUID\Root 中。

      • 图标:扩展点的目标。

      • 可移植可执行标头 (PE 标头) :包含有关映像的基本信息的扩展点的目标,这些扩展点需要直接访问或通过文件类型进行访问。

      • 脚本:下载脚本目录以在整个发布过程中使用。

    4. 填充包存储:

      1. 在磁盘上创建稀疏文件,这些文件代表列出的任何目录的提取包。

      2. 将顶级文件和目录暂存到根目录下。

      3. 当目录在磁盘上列为稀疏目录并按需流式传输时,将创建所有其他文件。

    5. 创建计算机目录条目。 如果包中没有 DeploymentConfiguration.xml 文件) 创建占位符, (从包文件创建 Manifest.xml 和 DeploymentConfiguration.xml。

    6. 在注册表 HKLM\Software\Microsoft\AppV\Client\Packages\PkgGUID\Versions\VerGUID\Catalog 中创建包存储的位置

    7. 将包存储区中的Registry.dat文件创建到 %ProgramData%\Microsoft\AppV\Client\VReg\{VersionGUID}.dat

    8. 向 App-V 内核模式驱动程序 HKLM\Microsoft\Software\AppV\MAV 注册包

    9. 从 AppxManifest.xml 或 DeploymentConfig.xml 文件调用脚本,以便进行包添加计时。

  4. 通过添加和启用或禁用来配置连接组。

  5. 删除未发布到目标 (用户或计算机) 的对象。

    注意 此操作不会执行包删除,而是删除特定目标 (用户或计算机) 的集成点,并删除全局发布的) (计算机目录文件的用户目录文件。

  6. 根据客户端配置调用后台加载装载。

  7. 已具有计算机或用户的发布信息的包会立即还原。

    注意 这种情况以删除产品的形式发生,无需取消发布并添加包的后台。

这将完成发布刷新过程的 App-V 包添加。 下一步是将包发布到特定目标 (计算机或用户) 。

包添加文件和注册表数据。

发布 App-V 包

在发布刷新操作期间,特定发布操作 (Publish-AppVClientPackage) 将条目添加到用户目录,将权利映射到用户,标识本地存储区,并通过完成任何集成步骤来完成。 下面是详细步骤。

如何发布和 App-V 包

  1. 将包条目添加到用户目录

    1. 用户定向包:UserDeploymentConfiguration.xml 和 UserManifest.xml 放置在用户目录中的计算机上

    2. 面向计算机 (全局) 包:UserDeploymentConfiguration.xml 放置在计算机目录中

  2. 在 HKLM\Software\Microsoft\AppV\MAV 中,将包注册到用户的内核模式驱动程序

  3. 执行集成任务。

    1. 创建扩展点。

    2. 将备份信息存储在用户的注册表和漫游配置文件中, (快捷方式备份) 。

      注意 如果包未发布,这将启用还原扩展点。

    3. 运行针对发布计时的脚本。

发布属于连接组的 App-V 包与上述过程非常相似。 对于连接组,存储特定目录信息的路径包括 PackageGroups 作为目录目录的子级。 有关详细信息,请查看上面的计算机和用户目录信息。

包添加文件和注册表数据 - 全局。

应用程序启动

发布刷新过程后,用户启动并随后重新启动 App-V 应用程序。 该过程非常简单,经过优化,可以快速启动,网络流量最少。 App-V 客户端会检查在发布期间创建的文件的用户目录的路径。 建立启动包的权限后,App-V 客户端将创建虚拟环境,开始流式处理任何必要的数据,并在虚拟环境创建期间应用相应的清单和部署配置文件。 为特定包和应用程序创建并配置虚拟环境后,应用程序将启动。

如何启动 App-V 应用程序

  1. 用户通过单击快捷方式或文件类型调用来启动应用程序。

  2. App-V 客户端验证以下文件的用户目录中是否存在

    • UserDeploymentConfiguration.xml

    • UserManifest.xml

  3. 如果存在文件,则应用程序有权用于该特定用户,并且应用程序将启动启动过程。 此时没有网络流量。

  4. 接下来,App-V 客户端检查为 App-V 客户端服务注册的包的路径是否在注册表中找到。

  5. 找到包存储的路径后,将创建虚拟环境。 如果这是首次启动,则主要功能块会下载(如果存在)。

  6. 下载后,App-V 客户端服务使用清单和部署配置文件来配置虚拟环境,并加载所有 App-V 子系统。

  7. 应用程序启动。 对于包存储中缺少的任何文件 (稀疏文件) ,App-V 将根据需要对文件进行流式处理。

    包 添加文件和注册表数据 - 流。

升级 App-V 包

App-V 5 包升级过程与旧版 App-V 不同。 App-V 在授权给不同用户的计算机上支持同一包的多个版本。 包版本可以随时添加,因为包存储和目录是使用新资源更新的。 特定于添加新版本资源的唯一过程是存储优化。 在升级期间,只会将新文件添加到新版本存储位置,并为未更改的文件创建硬链接。 这样,只需在一个磁盘位置上显示文件,然后将其投影到磁盘上具有文件位置条目的所有文件夹中,从而减少了总体存储。 升级 App-V 包的具体详细信息如下:

如何升级 App-V 包

  1. App-V 客户端执行发布刷新并发现 App-V 包的较新版本。

  2. 将包条目添加到新版本的相应目录中

    1. 用户目标包:UserDeploymentConfiguration.xml 和 UserManifest.xml 放置在用户目录中的 appdata\roaming\Microsoft\AppV\Client\Catalog\Packages\PkgGUID\VerGUID

    2. 面向计算机 (全局) 包:UserDeploymentConfiguration.xml 放置在计算机目录中的 %programdata%\Microsoft\AppV\Client\Catalog\Packages\PkgGUID\VerGUID

  3. 在 HKLM\Software\Microsoft\AppV\MAV 中,将包注册到用户的内核模式驱动程序

  4. 执行集成任务。

    • 从清单和动态配置文件 (EP) 集成扩展点。
    1. 基于文件的 EP 数据存储在 AppData 文件夹中,利用包存储中的交接点。

    2. 当新版本可用时,版本 1 EPs 已存在。

    3. 对于任何更新或更新的扩展点,扩展点将切换到计算机或用户目录中的版本 2 位置。

  5. 运行针对发布计时的脚本。

  6. 根据需要并排安装程序集。

升级正在使用的 App-V 包

从 App-V 5 SP2 开始:如果尝试升级最终用户正在使用的包,升级任务将处于挂起状态。 根据以下规则,升级将在稍后运行:

任务类型 适用规则

基于用户的任务,例如,向用户发布包

挂起的任务将在用户注销后执行,然后重新登录。

基于全局的任务,例如全局启用连接组

当计算机关闭并重新启动时,将执行挂起的任务。

当任务处于挂起状态时,App-V 客户端还会为挂起的任务生成注册表项,如下所示:

基于用户或基于全局的任务 生成注册表项的位置

基于用户的任务

KEY_CURRENT_USER\Software\Microsoft\AppV\Client\PendingTasks

基于全局的任务

HKEY_LOCAL_MACHINE\Software\Microsoft\AppV\Client\PendingTasks

用户必须先完成以下操作,然后才能使用包的较新版本:

任务 详细信息

将包添加到计算机

此任务特定于计算机,你可以随时通过完成上述“包添加”部分中的步骤来执行它。

发布包

有关步骤,请参阅上面的包发布部分。 此过程要求更新系统上的扩展点。 完成此任务时,最终用户无法使用该应用程序。

使用以下示例方案作为更新包的指南。

方案 要求

尝试升级时未使用 App-V 包

包的以下组件均不能使用:虚拟应用程序、COM 服务器或 shell 扩展。

管理员发布包的较新版本,下次启动包中的组件或应用程序时,升级将正常工作。 包的新版本将进行流式传输并运行。 与早期版本的 App-V 5 相比,此方案在 App-V 5 SP2 中没有任何更改。

当管理员发布较新版本的包时,App-V 包正在使用中

升级操作被 App-V 客户端设置为挂起,这意味着它将排队,并在稍后包未使用时执行。

如果包应用程序正在使用中,用户将关闭虚拟应用程序,然后即可进行升级。

如果包具有由 Windows 资源管理器永久加载 (Office 2013) 的 shell 扩展,则用户无法登录。 用户必须注销并重新登录才能启动 App-V 包升级。

全局发布与用户发布

可以通过以下两种方式之一发布 App-V 包:将 App-V 包授权给特定用户或用户组的用户,将 App-V 包授权给计算机的所有用户的全局用户。 完成包升级且 App-V 包未使用后,请考虑两种类型的发布:

  • 全局发布:应用程序发布到计算机;该计算机上的所有用户都可以使用它。 当 App-V 客户端服务启动时,升级将发生,这实际上意味着计算机重启。

  • 用户已发布:应用程序将发布到用户。 如果计算机上有多个用户,则可以将应用程序发布到用户的子集。 当用户登录或定期 (再次发布、ConfigMgr 策略刷新和评估、App-V 定期发布/刷新时,或者通过 PowerShell 命令) 显式发布时,将发生升级。

删除 App-V 包

删除完整基础结构中的 App-V 应用程序是一项未发布操作,不会执行包删除。 该过程与上面的发布过程相同,但删除过程会撤消对 App-V 包所做的更改,而不是添加删除过程。

修复 App-V 包

修复操作非常简单,但可能会影响计算机上的许多位置。 删除前面提到的“写入时复制 (COW) 位置,并取消集成扩展点,然后重新集成。 请查看 COW 数据放置位置,方法是查看它们在注册表中的注册位置。 此操作是自动完成的,除了从 App-V 客户端控制台或通过 PowerShell (Repair-AppVClientPackage) 启动修复操作外,没有任何管理控制。

App-V 包的集成

App-V 客户端和包体系结构在添加和发布包期间提供与本地操作系统的特定集成。 三个文件定义 App-V 包的集成点或扩展点:

  • AppXManifest.xml:存储在包内部,回退副本存储在包存储和用户配置文件中。 包含排序过程中创建的选项。

  • DeploymentConfig.xml:提供计算机和基于用户的集成扩展点的配置信息。

  • UserConfig.xml:仅提供基于用户的配置且仅面向基于用户的扩展点的 Deploymentconfig.xml 的子集。

集成规则

使用 App-V 客户端将 App-V 应用程序发布到计算机时,将执行一些特定操作,如以下列表所述:

  • 全局发布:快捷方式存储在“所有用户”配置文件位置,其他扩展点存储在 HKLM 配置单元的注册表中。

  • 用户发布:快捷方式存储在当前用户帐户配置文件中,其他扩展点存储在 HKCU 配置单元的注册表中。

  • 备份和还原:在发布过程中备份现有的本机应用程序数据和注册表 (,例如 FTA 注册) 。

    1. App-V 包基于上一个集成包授予所有权,该包的所有权将传递给最新发布的 App-V 应用程序。

    2. 当拥有的 App-V 包未发布时,所有权从一个 App-V 包转移到另一个 App-V 包。 这不会启动数据或注册表的还原。

    3. 在每个扩展点取消发布或删除最后一个包时还原备份的数据。

扩展点

App-V 发布文件 (清单和动态配置) 提供了多个扩展点,使应用程序能够与本地操作系统集成。 这些扩展点执行典型的应用程序安装任务,例如放置快捷方式、创建文件类型关联和注册组件。 由于这些是虚拟化应用程序,其安装方式与传统应用程序不同,因此存在一些差异。 下面是本节中介绍的扩展点列表:

  • 快捷方式

  • 文件类型关联

  • Shell 扩展

  • COM

  • 软件客户端

  • 应用程序功能

  • URL 协议处理程序

  • AppPath

  • 虚拟应用程序

快捷方式

捷径是与 OS 集成的基本元素之一,是用户直接启动 App-V 应用程序的界面。 在发布和取消发布 App-V 应用程序期间。

在包清单和动态配置 XML 文件中,可以在类似于以下内容的部分中找到特定应用程序可执行文件的路径:

<Extension Category="AppV.Shortcut">
          <Shortcut>
            <File>[{Common Desktop}]\Adobe Reader 9.lnk</File>
            <Target>[{AppVPackageRoot}]\Reader\AcroRd32.exe</Target>
            <Icon>[{Windows}]\Installer\{AC76BA86-7AD7-1033-7B44-A94000000001}\SC_Reader.ico</Icon>
            <Arguments />
            <WorkingDirectory />
            <ShowCommand>1</ShowCommand>
            <ApplicationId>[{AppVPackageRoot}]\Reader\AcroRd32.exe</ApplicationId>
          </Shortcut>
        </Extension>

如前所述,App-V 快捷方式默认基于刷新操作放置在用户的配置文件中。 全局刷新将快捷方式置于“所有用户”配置文件中,用户刷新将它们存储在特定用户的配置文件中。 实际的可执行文件存储在包存储中。 ICO 文件的位置是 App-V 包中的标记化位置。

文件类型关联

App-V 客户端在发布期间管理本地操作系统文件类型关联,使用户能够使用文件类型调用或打开具有特定注册扩展名 (.docx) 的文件来启动 App-V 应用程序。 清单和动态配置文件中存在文件类型关联,如以下示例所示:

<Extension Category="AppV.FileTypeAssociation">
          <FileTypeAssociation>
            <FileExtension MimeAssociation="true">
              <Name>.xdp</Name>
              <ProgId>AcroExch.XDPDoc</ProgId>
              <ContentType>application/vnd.adobe.xdp+xml</ContentType>
            </FileExtension>
            <ProgId>
              <Name>AcroExch.XDPDoc</Name>
              <Description>Adobe Acrobat XML Data Package File</Description>
              <EditFlags>65536</EditFlags>
              <DefaultIcon>[{Windows}]\Installer\{AC76BA86-7AD7-1033-7B44-A94000000001}\XDPFile_8.ico</DefaultIcon>
              <ShellCommands>
                <DefaultCommand>Read</DefaultCommand>
                <ShellCommand>
                  <ApplicationId>[{AppVPackageRoot}]\Reader\AcroRd32.exe</ApplicationId>
                  <Name>Open</Name>
                  <CommandLine>"[{AppVPackageRoot}]\Reader\AcroRd32.exe" "%1"</CommandLine>
                </ShellCommand>
                <ShellCommand>
                  <ApplicationId>[{AppVPackageRoot}]\Reader\AcroRd32.exe</ApplicationId>
                  <Name>Printto</Name>
                  <CommandLine>"[{AppVPackageRoot}]\Reader\AcroRd32.exe"  /t "%1" "%2" "%3" "%4"</CommandLine>
                </ShellCommand>
                <ShellCommand>
                  <ApplicationId>[{AppVPackageRoot}]\Reader\AcroRd32.exe</ApplicationId>
                  <Name>Read</Name>
                  <FriendlyName>Open with Adobe Reader 9</FriendlyName>
                  <CommandLine>"[{AppVPackageRoot}]\Reader\AcroRd32.exe" "%1"</CommandLine>
                </ShellCommand>
              </ShellCommands>
            </ProgId>
          </FileTypeAssociation>
        </Extension>

注意 在此示例中:

  • <Name>.xdp</Name> 是扩展

  • <Name>AcroExch.XDPDoc</Name> 是 ProgId 值 (,它指向相邻的 ProgId)

  • <CommandLine>"[{AppVPackageRoot}]\Reader\AcroRd32.exe" "%1"</CommandLine> 是指向应用程序可执行文件的命令行

Shell 扩展

Shell 扩展在排序过程中自动嵌入到包中。 全局发布包时,shell 扩展为用户提供与本地安装应用程序相同的功能。 应用程序无需在客户端上进行其他设置或配置即可启用 shell 扩展功能。

使用 shell 扩展的要求:

  • 包含嵌入 shell 扩展的包必须全局发布。

  • 应用程序、Sequencer 和 App-V 客户端的“位数”必须匹配,否则 shell 扩展将不起作用。 例如:

    • 应用程序的版本为 64 位。

    • Sequencer 在 64 位计算机上运行。

    • 包将传递到 64 位 App-V 客户端计算机。

下表显示了支持的 shell 扩展。

处理器 说明

上下文菜单处理程序

将菜单项添加到上下文菜单。 在显示上下文菜单之前调用它。

拖放处理程序

在右键单击拖放时控制操作,并修改显示的上下文菜单。

删除目标处理程序

控制将数据对象拖放到文件等放置目标上之后的操作。

数据对象处理程序

控制文件复制到剪贴板或拖放到放置目标之后的操作。 它可以为放置目标提供其他剪贴板格式。

属性表处理程序

替换页面或向对象的属性表对话框添加页。

信息提示处理程序

允许检索项的标志和信息提示信息,并在鼠标悬停时将其显示在弹出工具提示中。

列处理程序

允许在 Windows 资源管理器 详细信息视图中创建和显示自定义列。 它可用于扩展排序和分组。

预览处理程序

允许在 Windows 资源管理器预览窗格中显示文件的预览。

COM

App-V 客户端支持发布支持 COM 集成和虚拟化的应用程序。 COM 集成允许 App-V 客户端在本地操作系统上注册 COM 对象,并虚拟化对象。 就本文档而言,COM 对象的集成需要其他详细信息。

App-V 支持使用两种进程类型将 COM 对象从包注册到本地操作系统:进程外和进程内。 注册 COM 对象是通过特定 App-V 包的一种或多种操作模式的组合完成的,其中包括 off、Isolated 和 Integrated。 为进程外或进程内类型配置集成模式。 使用动态配置文件 (deploymentconfig.xml 或 userconfig.xml) 完成 COM 模式和类型的配置。

有关 App-V 集成的详细信息,请参阅: https://go.microsoft.com/fwlink/?LinkId=392834

软件客户端和应用程序功能

App-V 支持特定的软件客户端和应用程序功能扩展点,这些扩展点使虚拟化应用程序能够注册到操作系统的软件客户端。 这使用户能够选择电子邮件、即时消息和媒体播放器等操作的默认程序。 此操作使用“设置程序访问”和“计算机默认值”在控制面板中执行,并在清单或动态配置文件的排序期间进行配置。 仅当全局发布 App-V 应用程序时,才支持应用程序功能。

基于 App-V 的邮件客户端的软件客户端注册示例。

    <SoftwareClients Enabled="true">
      <ClientConfiguration EmailEnabled="true" />
      <Extensions>
        <Extension Category="AppV.SoftwareClient">
          <SoftwareClients>
            <EMail MakeDefault="true">
              <Name>Mozilla Thunderbird</Name>
              <Description>Mozilla Thunderbird</Description>
              <DefaultIcon>[{ProgramFilesX86}]\Mozilla Thunderbird\thunderbird.exe,0</DefaultIcon>
              <InstallationInformation>
                <RegistrationCommands>
                  <Reinstall>"[{ProgramFilesX86}]\Mozilla Thunderbird\uninstall\helper.exe" /SetAsDefaultAppGlobal</Reinstall>
                  <HideIcons>"[{ProgramFilesX86}]\Mozilla Thunderbird\uninstall\helper.exe" /HideShortcuts</HideIcons>
                  <ShowIcons>"[{ProgramFilesX86}]\Mozilla Thunderbird\uninstall\helper.exe" /ShowShortcuts</ShowIcons>
                </RegistrationCommands>
                <IconsVisible>1</IconsVisible>
                <OEMSettings />
              </InstallationInformation>
              <ShellCommands>
                <ApplicationId>[{ProgramFilesX86}]\Mozilla Thunderbird\thunderbird.exe</ApplicationId>
                <Open>"[{ProgramFilesX86}]\Mozilla Thunderbird\thunderbird.exe" -mail</Open>
              </ShellCommands>
              <MAPILibrary>[{ProgramFilesX86}]\Mozilla Thunderbird\mozMapi32_InUse.dll</MAPILibrary>
              <MailToProtocol>
                <Description>Thunderbird URL</Description>
                <EditFlags>2</EditFlags>
                <DefaultIcon>[{ProgramFilesX86}]\Mozilla Thunderbird\thunderbird.exe,0</DefaultIcon>
                <ShellCommands>
                  <ApplicationId>[{ProgramFilesX86}]\Mozilla Thunderbird\thunderbird.exe</ApplicationId>
                  <Open>"[{ProgramFilesX86}]\Mozilla Thunderbird\thunderbird.exe" -osint -compose "%1"</Open>
                </ShellCommands>
              </MailToProtocol>
            </EMail>
          </SoftwareClients>
        </Extension>
      </Extensions>
    </SoftwareClients>

注意 在此示例中:

  • <ClientConfiguration EmailEnabled="true" />是用于集成Email客户端的整体软件客户端设置

  • <EMail MakeDefault="true">是将特定Email客户端设置为默认Email客户端的标志

  • <MAPILibrary>[{ProgramFilesX86}]\Mozilla Thunderbird\mozMapi32_InUse.dll</MAPILibrary> 是 MAPI dll 注册

URL 协议处理程序

应用程序并不总是专门调用利用文件类型调用的虚拟化应用程序。 例如,在支持在文档或网页中嵌入 mailto: 链接的应用程序中,用户单击 mailto: 链接并期望获取其已注册的邮件客户端。 App-V 支持可在每个包中注册到本地操作系统的 URL 协议处理程序。 在排序期间,URL 协议处理程序会自动添加到包中。

对于有多个应用程序可以注册特定 URL 协议处理程序的情况,可以使用动态配置文件来修改行为,并禁止或禁用不应作为主应用程序启动的应用程序的此功能。

AppPath

AppPath 扩展点支持直接从操作系统调用 App-V 应用程序。 这通常通过“运行”或“开始”屏幕完成,具体取决于操作系统,这使管理员能够从操作系统命令或脚本提供对 App-V 应用程序的访问权限,而无需调用可执行文件的特定路径。 因此,它避免修改所有系统上的系统路径环境变量,因为这是在发布期间完成的。

AppPath 扩展点在清单或动态配置文件中配置,并在用户发布期间存储在本地计算机上的注册表中。 有关 AppPath 的其他信息,请查看: https://go.microsoft.com/fwlink/?LinkId=392835

虚拟应用程序

此子系统提供在排序期间捕获的应用程序列表,这些应用程序通常由其他 App-V 组件使用。 可以使用动态配置文件禁用属于特定应用程序的扩展点集成。 例如,如果包包含两个应用程序,可以禁用属于一个应用程序的所有扩展点,以便仅允许集成其他应用程序的扩展点。

扩展点规则

根据包的发布方式,将上述扩展点集成到操作系统中。 全局发布在公共计算机位置放置扩展点,用户发布将扩展点置于用户位置。 例如,在桌面上创建并全局发布的快捷方式将导致快捷方式 (%Public%\Desktop) 的文件数据,而注册表数据 (HKLM\Software\Classes) 。 同一快捷方式会将文件数据 (%UserProfile%\Desktop) 和注册表数据 (HKCU\Software\Classes) 。

并非所有扩展点都以相同的方式发布,其中一些扩展点需要全局发布,而另一些扩展点需要对交付它们的特定操作系统和体系结构进行排序。 下表描述了这两个关键规则。

虚拟扩展 需要目标 OS 排序 需要全局发布

快捷方式

文件类型关联

URL 协议

X

AppPaths

X

COM 模式

软件客户端

X

应用程序功能

X

X

上下文菜单处理程序

X

X

拖放处理程序

X

数据对象处理程序

X

属性表处理程序

X

信息提示处理程序

X

列处理程序

X

Shell 扩展

X

浏览器帮助程序对象

X

X

Active X 对象

X

X

动态配置处理

将 App-V 包部署到一台计算机或用户非常简单。 但是,当组织跨业务线以及地理和政治边界部署 AppV 应用程序时,无法使用一组设置对应用程序进行一次排序。 App-V 是针对此方案设计的,因为它在清单文件中的排序期间捕获特定设置和配置,但也支持对动态配置文件进行修改。

App-V 动态配置允许在计算机级别或用户级别为包指定策略。 动态配置文件使排序工程师能够修改包的配置(排序后),以满足单个用户组或计算机组的需求。 在某些情况下,可能需要对应用程序进行修改,以在 App-V 环境中提供适当的功能。 例如,可能需要对 _*config.xml 文件进行修改,以允许在执行应用程序期间在指定时间执行某些操作,例如禁用 mailto 扩展以防止虚拟化应用程序从另一个应用程序覆盖该扩展。

App-V 包包含 appv 包文件内的清单文件,该文件代表排序操作,是所选策略,除非动态配置文件分配给特定包。 排序后,可以修改动态配置文件,以允许将应用程序发布到具有不同扩展点的不同桌面或用户。 这两个动态配置文件是动态部署配置 (DDC) 和动态用户配置 (DUC) 文件。 本部分重点介绍清单和动态配置文件的组合。

动态配置文件的示例

以下示例显示了在发布后和正常操作期间清单、部署配置和用户配置文件的组合。 这些示例是每个文件的缩写示例。 目的是仅显示文件的组合,而不是每个文件中可用的特定类别的完整说明。 有关详细信息,请参阅以下位置的 App-V 5 序列化指南: https://go.microsoft.com/fwlink/?LinkID=269810

Manifest

<appv:Extension Category="AppV.Shortcut">
     <appv:Shortcut>
          <appv:File>[{Common Programs}]\7-Zip\7-Zip File Manager.lnk</appv:File>
          <appv:Target>[{AppVPackageRoot}]\7zFM.exe</appv:Target>
          <appv:Icon>[{AppVPackageRoot}]\7zFM exe.O.ico</appv:Icon>
     </appv:Shortcut>
</appv:Extension>

部署配置

<MachineConfiguration>
     <Subsystems>
          <Registry>
               <Include>
                    <Key Path= "\REGISTRY\Machine\Software\7zip">
                    <Value Type="REG_SZ" Name="Config" Data="1234"/>
                    </Key>
               </Include>
          </Registry>
     </Subsystems>

用户配置

<UserConfiguration>
     <Subsystems>
<appv:ExtensionCategory="AppV.Shortcut">
     <appv:Shortcut>
          <appv:File>[{Desktop}]\7-Zip\7-Zip File Manager.lnk</appv:File>
          <appv:Target>[{AppVPackageRoot}]\7zFM.exe</appv:Target>
          <appv:Icon>[{AppVPackageRoot}]\7zFM exe.O.ico</appv:Icon>
     </appv:Shortcut>
</appv:Extension>
     </Subsystems>
<UserConfiguration>
     <Subsystems>
<appv:Extension Category="AppV.Shortcut">
     <appv:Shortcut>
          <appv:Fìle>[{Desktop}]\7-Zip\7-Zip File Manager.lnk</appv:File>
          <appv:Target>[{AppVPackageRoot}]\7zFM.exe</appv:Target>
          <appv:Icon>[{AppVPackageRoot}]\7zFM.exe.O.ico</appv:Icon>
     </appv:Shortcut>
     <appv:Shortcut>
          <appv:File>[{Common Programs}]\7-Zip\7-Zip File Manager.Ink</appv:File>
          <appv:Target>[{AppVPackageRoot}]\7zFM.exe</appv:Target>
          <appv:Icon>[{AppVPackageRoot)]\7zFM.exe.O.ico</appv: Icon>
     </appv:Shortcut>
</appv:Extension>
     </Subsystems>
<MachineConfiguration>
     <Subsystems>
          <Registry>
               <Include>
                    <Key Path="\REGISTRY\Machine\Software\7zip">
                    <Value Type=”REG_SZ" Name="Config" Data="1234"/>
               </Include>
          </Registry>
     </Subsystems>

并行程序集

App-V 支持在虚拟应用程序发布期间在客户端上排序和部署期间并行打包 (SxS) 程序集。 App-V 5 SP2 支持在序列化期间捕获排序计算机上不存在的程序集的 SxS 程序集。 并且,对于包含 Visual C++ (版本 8 和更新) 和/或 MSXML 运行时的程序集,Sequencer 将自动检测和捕获这些依赖项,即使监视期间未安装这些依赖项。 并行程序集功能消除了以前版本的 App-V 的限制,App-V Sequencer 未捕获排序工作站上已存在的程序集,并且将每个包限制为一个位版本的程序集私有化。 此行为导致将 App-V 应用程序部署到客户端时缺少所需的 SxS 程序集,从而导致应用程序启动失败。 这迫使打包过程记录,然后确保在用户的客户端操作系统本地安装包所需的所有程序集,以确保对虚拟应用程序的支持。 根据程序集的数量和缺少所需依赖项的应用程序文档,此任务既是管理和实现难题。

App-V 中的并行程序集支持具有以下功能。

  • 在排序期间自动捕获 SxS 程序集,而不管该程序集是否已安装在排序工作站上。

  • 当所需的 SxS 程序集不存在时,App-V 客户端会在发布时自动将所需的 SxS 程序集安装到客户端计算机。

  • Sequencer 在 Sequencer 报告机制中报告 VC 运行时依赖项。

  • Sequencer 允许选择不打包已在 Sequencer 上安装的程序集,支持以前在目标计算机上安装程序集的方案。

SxS 程序集的自动发布

在发布具有 SxS 程序集的 App-V 包期间,App-V 客户端将检查计算机上是否存在程序集。 如果程序集不存在,则客户端会将程序集部署到计算机。 属于连接组的包将依赖于作为基本包一部分的并行程序集安装,因为连接组不包含有关程序集安装的任何信息。

注意 取消发布或删除包含程序集的包不会删除该包的程序集。

客户端日志记录

App-V 客户端以标准 ETW 格式将信息记录到 Windows 事件日志中。 可以在事件查看器中的“应用程序和服务日志\Microsoft\AppV\Client”下找到特定的 App-V 事件。

注意 在 App-V 5.0 SP3 中,某些日志已合并并移动到以下位置:

Event logs/Applications and Services Logs/Microsoft/AppV/ServiceLog

有关已移动日志的列表,请参阅 关于 App-V 5.0 SP3

下面记录了三个特定类别的事件。

管理员:记录要应用于 App-V 客户端的配置的事件,并包含主要警告和错误。

操作:记录单个组件的常规 App-V 执行和使用情况,以创建 App-V 客户端上已完成的 App-V 操作的审核日志。

虚拟应用程序:记录虚拟应用程序启动和使用虚拟化子系统。