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

适用于:

  • Windows 10
  • Windows 11

本文提供有关常见 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 模板文件。

若要了解有关排序的详细信息,请参阅 如何使用 App-V 对新应用程序进行排序

appv 文件中有什么?

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

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

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

名称 类型 说明
文件夹 包含序列化期间捕获的虚拟化应用程序的文件系统的目录。
[Content_Types].xml XML 文件 appv 文件中的核心内容类型列表 (例如 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,但你可以在设置过程中或之后使用 Set-AppVClientConfiguration Windows PowerShell cmdlet 对其进行配置,该 cmdlet 修改 HKLM\Software\Microsoft\AppV\Client\Streaming 密钥) 下的本地注册表 (PackageInstallationRoot 值。 包存储必须位于客户端操作系统上的本地路径。 各个包存储在包存储区中,子目录中以包 GUID 和版本 GUID 命名。

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

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

若要在安装过程中更改包存储的默认位置,请参阅 启用 App-V 桌面客户端

共享内容存储

如果在共享内容存储模式下配置 App-V 客户端,则发生流故障时不会将任何数据写入磁盘,这意味着包 (发布数据) 所需的本地磁盘空间最小。 在可以限制本地存储的 VDI 环境中,请务必尽可能少地使用磁盘空间。 可以通过从高性能网络位置 ((例如 SAN) )流式传输应用程序来最大程度地减少磁盘空间使用量。 有关详细信息,请参阅 Microsoft App-V 5.0 中的共享内容存储 - 幕后

注意

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

包目录

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

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

计算机目录

可在 %programdata%\Microsoft\AppV\Client\Catalog\ 文件夹中找到此表中所述的位置。

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

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

如果计算机上的用户可以使用包 (全局或非全局) ,则清单存储在计算机目录中。 全局发布包时,计算机目录中存储有一个动态配置文件;因此,根据计算机目录中是否有策略文件 (UserDeploymentConfiguration 文件) 定义包是否为全局包。
默认存储位置 %programdata%\Microsoft\AppV\Client\Catalog<br>
此位置与包存储位置不同。 包存储是包文件的黄金或原始副本。
计算机目录中的文件 - Manifest.xml
- DeploymentConfiguration.xml
- UserManifest.xml (全局发布的包)
- UserDeploymentConfiguration.xml (全局发布的包)
其他计算机目录位置,当包是连接组的一部分时使用 以下位置是前面提到的作为默认存储位置的特定包位置的补充:

%programdata%\Microsoft\AppV\Client\Catalog\PackageGroups\ConGroupGUID\ConGroupVerGUID
当包属于连接组时,计算机目录中的其他文件 - PackageGroupDescriptor.xml
- UserPackageGroupDescriptor.xml (全局发布的连接组)

用户目录

可在 appdata\roaming\Microsoft\AppV\Client\Catalog\ 文件夹中找到此表中所述的位置。

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

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

对于漫游用户,用户目录需要位于漫游或共享位置,以保留默认面向用户的旧 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

下表中的注册表位于 Registry\Client\Packages\PkgGUID\ 文件夹中。

位置 说明
- 计算机注册表\Client\Packages\PkgGUID\REGISTRY (只有提升进程才能写入)
- 用户注册表\Client\Packages\PkgGUID\REGISTRY (用户漫游在 HKCU 下写入的任何内容,但 Software\Classes 除外
- 用户注册表类\Client\Packages\PkgGUID\REGISTRY (HKCU\Software\Classes 针对非提升的进程写入和 HKLM)
- 计算机注册表\Client\Packages\PkgGUID\Versions\VerGuid\Registry\Machine
- 用户注册表类\Client\Packages\PkgGUID\Versions\VerGUID\Registry
本地 - 本机应用程序注册表位置

连接组 VReg

下表中的注册表位于计算机注册表\Client\PackageGroups\GrpGUID\ 和用户注册表类\Client\PackageGroups\GrpGUID\ 文件夹中。

位置 说明
- 计算机注册表\Client\PackageGroups\GrpGUID\REGISTRY (只有提升进程才能写入)
- User Registry\Client\PackageGroups\GrpGUID\REGISTRY (除 Software\Classes 之外的任何内容)
- 用户注册表类\Client\PackageGroups\GrpGUID\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 管理包存储区,这是存储 appv 文件中扩展的资产文件的位置。 默认情况下,此位置存储在 %ProgramData%\App-V 上,并且仅受可用磁盘空间的存储功能限制。 包存储区由包和版本的 GUID 组织,如上一部分所述。

添加包

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

装载包

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

流式处理包

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

策略 描述
AllowHighCostLaunch 允许通过 3G 和手机网络进行流式传输
自动加载 指定后台加载设置:
0–已禁用
1 - 仅以前使用的包
2 - 所有包
PackageInstallationRoot 本地计算机中包存储的根文件夹
PackageSourceRoot 应从中流式传输包的根替代
SharedContentStoreMode 允许将共享内容存储用于 VDI 方案

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

  • 后台流式处理
  • 优化的流式处理
  • Stream故障

后台流式处理

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

优化的流式处理

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

Stream故障

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

包升级

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

包删除

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

漫游注册表和数据

App-V 能够在漫游时提供近乎本机的体验,具体取决于所使用的应用程序的编写方式。 默认情况下,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 的位置是 HKLM\SOFTWARE\Microsoft\AppV\Client\Packages\{PkgGUID}\{UserSID}\REGISTRY\MACHINE\SOFTWARE
- HKCU 的位置是 HKCU\SOFTWARE\Microsoft\AppV\Client\Packages\{PkgGUID}\Registry\User\{UserSID}\SOFTWARE

App-V 和文件夹重定向

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

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

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

包中的 VFS 目录 后备存储的映射位置
ProgramFilesX86 C:\Users\Local\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\ProgramFilesX86
SystemX86 C:\Users\username\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\SystemX86
Windows C:\Users\username\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\Windows
appv_ROOT C:\Users\username\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\appv_ROOT
AppData C:\Users\username\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\AppData

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

包中的 VFS 目录 后备存储的映射位置
ProgramFilesX86 C:\Users\Local\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\ProgramFilesX86
SystemX86 C:\Users\Local\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\SystemX86
Windows C:\Users\Local\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\Windows
appv_ROOT C:\Users\Local\AppData\Local\Microsoft\AppV\Client\VFS\<GUID>\appv_ROOT
AppData \Fileserver\users\Local\roaming\Microsoft\AppV\Client\VFS\<GUID>\AppData

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

  1. 在发布或虚拟环境启动期间,App-V 客户端会检测 AppData 目录的位置。
  2. 如果漫游 AppData 路径为本地或未映射 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 与 Microsoft Configuration Manager 集成的具体信息,请参阅使用 Configuration Manager 部署 App-V 虚拟应用程序

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

发布刷新

发布刷新过程包括几个在 App-V 客户端上执行的较小操作。 由于 App-V 是一种应用程序虚拟化技术,而不是任务计划技术,因此在用户登录、计算机打开和按计划间隔时,Windows 任务计划程序将用于启用该过程。 将客户端分发到具有正确设置的一大组计算机时,上一部分中列出的安装过程中的客户端配置是首选方法。 可以使用以下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 包添加到客户端是发布刷新过程的第一步。 最终结果与 Windows PowerShell 中的 Add-AppVClientPackage cmdlet 相同,只是发布刷新添加过程会联系配置的发布服务器,并将应用程序的高级列表传递回客户端以拉取更详细的信息,而不仅仅是执行单个包添加操作。

然后,该过程配置客户端以添加或更新包或连接组,然后访问 appv 文件。 接下来,appv 文件的内容将展开并放置在本地操作系统上的相应位置。 以下步骤是该过程的详细工作流,假设包已针对错误流式处理进行配置。

如何添加 App-V 包

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

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

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

  2. App-V 客户端上的发布代理将评估任何未发布或禁用的连接组,因为无法处理属于连接组的包版本更新。

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

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

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

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

      • 图标:扩展点的目标。
      • 可移植可执行标头 (PE 标头) :包含磁盘上映像所需的基本信息的扩展点的目标,直接或通过文件类型访问。
      • 脚本:下载脚本目录以在整个发布过程中使用。
    4. 通过执行以下子步骤来填充包存储:

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

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

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

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

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

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

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

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

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

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

    注意

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

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

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

    注意

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

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

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

包添加文件和注册表数据

发布 App-V 包

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

如何发布 App-V 包

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

    1. 面向用户的包: UserDeploymentConfiguration.xmlUserManifest.xml 文件放置在用户目录中的计算机上。

    2. 针对全局) 包 (计算机: UserDeploymentConfiguration.xml 放置在计算机目录中。

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

  3. 执行集成任务。

    1. Create扩展点。

    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 的包升级过程的当前版本与其存储优化中的旧版本不同。 App-V 在授权给不同用户的计算机上支持同一包的多个版本。 可以随时添加包版本,因为包存储和目录会使用新资源进行更新。 在新版本的升级期间,只会将新文件添加到新版本存储位置,并为未更改的文件创建硬链接。 此类结果仅将文件呈现在一个磁盘位置上,然后将其投影到磁盘上具有文件位置条目的所有文件夹中,从而减少了总体存储。

如何升级 App-V 包

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

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

    1. 用户定向包: UserDeploymentConfiguration.xmlUserManifest.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. 执行集成任务。

    1. 从清单和动态配置文件 (EP) 集成扩展点。

    2. 基于文件的 EP 数据存储在 AppData 文件夹中,利用包存储中的交接点。

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

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

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

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

升级正在使用的 App-V 包

如果尝试升级当前正在使用的包,升级任务将处于挂起状态。 根据以下规则,升级将在稍后运行:

任务类型 适用规则
基于用户的任务,例如向用户发布包 挂起的任务将在用户注销后执行,然后重新登录。
基于全局的任务,例如全局启用连接组 当计算机关闭并重新启动时,将执行挂起的任务。

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

基于用户或基于全局的任务 生成注册表项的位置
基于用户的任务 HKEY_CURRENT_USER\Software\Microsoft\AppV\Client\PendingTasks
基于全局的任务 HKEY_LOCAL_MACHINE\Software\Microsoft\AppV\Client\PendingTasks

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

任务 详细信息
将包添加到计算机 此任务特定于计算机,你可以通过完成 如何添加 App-V 包中的步骤随时执行它。
发布包 有关步骤,请参阅上面的包发布部分。 此过程要求更新系统上的扩展点。 在使用应用程序时,无法完成此任务。

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

方案 要求
尝试升级时未使用 App-V 包 包的以下组件均不能使用:虚拟应用程序、COM 服务器或 shell 扩展。

管理员发布包的较新版本,下次启动包中的组件或应用程序时,升级将正常工作。 包的新版本将进行流式传输并运行。
当管理员发布较新版本的包时,App-V 包正在使用中 App-V 客户端将操作设置为“挂起”,这意味着该操作已排队,稍后将在包未使用时执行。

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

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

全局发布与用户发布

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

  • 全局发布是将应用程序发布到计算机时;该计算机上的所有用户都可以使用它。 当 App-V 客户端服务启动时,升级将发生,这实际上意味着计算机重启。
  • 用户发布是将应用程序发布到用户时。 如果计算机上有多个用户,则可以将应用程序发布到用户的子集。 当用户登录或定期 (再次发布、ConfigMgr策略刷新和评估、App-V 定期发布/刷新或显式通过Windows PowerShell命令) 时,将发生升级。

删除 App-V 包

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

修复 App-V 包

修复操作很容易执行,但可能会影响计算机上的许多位置。 删除前面提到的“写入时复制” (COW) 位置,并取消集成扩展点,然后重新合并。 在修复之前,请查看在注册表中注册 COW 数据放置位置的位置。 若要执行修复操作,只需从 App-V 客户端控制台或通过 Repair-AppVClientPackage PowerShell cmdlet 启动它。 之后,操作将自动完成。

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.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 包中的标记化位置。

文件类型关联

用户可以使用文件类型调用或打开具有注册扩展名 (.docx) 的文件来启动 App-V 应用程序,因为 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</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 包(包括“关闭”、“独立”和“集成”)的一种或多种操作模式的组合完成的。 为进程外或进程内类型配置集成模式。 COM 模式和类型的配置是通过动态配置文件 (deploymentconfig.xml 或 userconfig.xml) 完成的。

有关 App-V 集成的详细信息,请参阅 Microsoft Application Virtualization 5.0 集成

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

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: 链接的应用程序中,用户选择希望访问其已注册邮件客户端的链接。 App-V 支持可在每个包中注册到本地操作系统的 URL 协议处理程序。 在排序期间,URL 协议处理程序会自动添加到包中。

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

AppPath

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

AppPath 扩展点在清单或动态配置文件中配置,并在用户发布期间存储在本地计算机上的注册表中。 有关 AppPath 的详细信息,请查看: 应用路径 - App-V 5.0 中的虚拟应用程序扩展

虚拟应用程序

此子系统提供在排序期间捕获的应用程序列表,这些应用程序由其他 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 包部署到单个计算机或用户非常简单。 但是,当组织跨业务线以及地理和政治边界部署 App-V 应用程序时,不可能对所有具有相同设置的应用程序进行排序。 App-V 旨在通过捕获清单文件中排序期间的特定设置和配置来克服此问题,同时支持对动态配置文件进行修改。

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

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

动态配置文件示例

以下示例演示发布后和正常操作期间清单、部署配置和用户配置文件的组合。 这些示例是每个文件的缩写示例。 目的是仅显示文件的组合,而不是每个文件中可用的特定类别的完整说明。 有关详细信息,请下载 App-V 排序指南

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 支持在客户端上排序和部署期间并行程序集的自动打包。 对于排序计算机上不存在的程序集,App-V 还支持在排序期间捕获并行程序集。 对于包含 Visual C++ (版本 8 及更新) 或 MSXML 运行时的程序集,Sequencer 将自动检测和捕获这些依赖项,即使监视期间未安装这些依赖项。

并行程序集功能消除了以前版本的 App-V 的限制,其中 App-V Sequencer 未捕获排序工作站上已存在的程序集,并将程序集私有化,从而将程序集限制为每个包的位版本。 此行为导致 App-V 应用程序部署到客户端时缺少所需的并行程序集,从而导致应用程序启动失败。 此失败迫使打包过程记录并确保在用户的客户端操作系统上本地安装了包所需的所有程序集。 由于程序集数量多,缺少所需依赖项的应用程序文档,此任务既是管理和实现难题。

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

  • 在排序期间自动捕获并排程序集,而不管该程序集是否已安装在排序工作站上。
  • 如果尚未安装,App-V 客户端会在发布时自动将所需的并排程序集安装到客户端计算机。
  • Sequencer 在 Sequencer 报告机制中报告 VC 运行时依赖项。
  • Sequencer 允许选择不打包已在 Sequencer 上安装的程序集,这支持以前在目标计算机上安装了程序集的方案。

并行程序集的自动发布

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

注意

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

客户端日志记录

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

记录的事件有三个特定类别:

  • 管理员记录应用于 App-V 客户端的配置的事件,还包含主要警告和错误。
  • 操作 记录单个组件的常规 App-V 执行和使用情况,从而创建 App-V 客户端已完成 App-V 操作的审核日志。
  • 虚拟应用程序 记录虚拟应用程序启动和使用虚拟化子系统。