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

应用到: Application Virtualization 5.0, Application Virtualization 5.0 SP1, Application Virtualization 5.0 SP2, Application Virtualization 5.0 SP3

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

  • Sequencer 创建的 App-V 包文件

  • appv 文件中包括哪些内容?

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

  • 包注册表

  • APP-V 包存储区行为

  • 漫游注册表和数据

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

  • 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 文件存储在一个实体中。此文件采用基于开放打包约定 (OPC) 标准的 AppX 格式。

若要查看 appv 文件的内容,请复制该包,然后重命名复制的文件,将其扩展名更改为 ZIP。

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

名称 类型 描述

文件文件夹

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

[Content_Types].xml

XML 文件

appV 文件(例如 DLL、EXE、BIN)中核心内容类型的列表。

AppxBlockMap.xml

XML 文件

使用文件、块和块映射元素以对 App-V 包中的文件进行定位和验证的 appV 文件的布局。

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 PowerShell 命令修改本地注册表(HKLM\Software\Microsoft\AppV\Client\Streaming 项下的 PackageInstallationRoot 值),在安装期间或安装之后对其进行配置。包存储区必须位于客户端操作系统上的本地路径。单独的包存储在为包 GUID 和版本 GUID 指定的子目录的包存储区中。

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

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

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

共享内容存储区

如果在共享内容存储模式下配置 App-V 客户端,则当出现流故障时,不会将任何数据写入磁盘,这意味着包需要最少的本地磁盘空间(发布数据)。使用的磁盘空间较少在 VDI 环境中非常有利,在该环境中,本地存储可能受到限制,对高性能网络位置(如 SAN)中的应用程序进行流式处理更可取。有关共享内容存储模式的详细信息,请参阅 https://go.microsoft.com/fwlink/p/?LinkId=392750

note备注
计算机和包存储区必须位于本地驱动器上,即使你正对 App-V 客户端使用共享内容存储配置。

包目录

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

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

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

计算机目录

描述

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

如果包是非全局的,那么将仅针对特定用户发布集成,但是仍存在修改过的且对客户端计算机上的所有用户可见的全局资源(例如,包目录在共享磁盘位置上)。

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

默认存储位置

%programdata%\Microsoft\AppV\Client\Catalog\

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

计算机目录中的文件

  • Manifest.xml

  • DeploymentConfiguration.xml

  • UserManifest.xml(全局发布包)

  • UserDeploymentConfiguration.xml(全局发布包)

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

下面的位置是除上面提到的特定包位置外的位置:

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

当包是连接组的一部分时计算机目录中的其他文件

  • PackageGroupDescriptor.xml

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

用户目录

描述

在发布过程中创建。包含用于发布包的信息,还包含启动时用于确保向特定用户提供了包的信息。在漫游位置创建并包括特定于用户的发布信息。

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

对于漫游用户,用户目录需要位于漫游或共享位置,以默认保留目标用户的旧 App-V 行为。权限和策略与用户关联,而不是计算机,因此,一旦设置后,它们应随用户漫游。

默认存储位置

ppdata\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 本地位置存储适用于典型 Windows 而非 %AppData% 位置的更改。列出的目录将各不相同,但对任何典型的 Windows 位置(例如 Common AppData 和 Common AppDataS)都有两个位置。当虚拟服务请求从登录用户更改为另外一个提升的用户时,S 表示受限制的位置。非 S 位置存储基于用户的更改。

包注册表

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

新的包添加到 App-V 客户端后,会在 %ProgramData%\Microsoft\AppV\Client\VREG\{Version GUID}.dat 创建该包的 REGISTRY.DAT 文件的副本。该文件的名称是具有 .DAT 扩展名的版本 GUID。创建此副本的目的是确保绝不会使用包中的实际配置单元文件,这样可以防止在后面删除包。

包存储区的 Registry.dat

 > 

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

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

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

当存在连接组时,之前暂存注册表的过程有效,但不是处理一个配置单元文件,而是处理多个。这些文件按照在连接组 XML 中出现的顺序处理,出现任何冲突时以第一个编写程序为准。

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

虚拟注册表

虚拟注册表 (VREG) 用于向应用程序提供包注册表和本机注册表的单个合并视图。它还提供了写入时复制 (COW) 功能 – 也就是,通过虚拟过程的上下文对注册表进行的任何更改都会应用到单独的 COW 位置。这意味着 VREG 必须根据注册表“COW -> 包 -> 本机”中填充的位置将最多三个单独的注册表位置组合到一个视图中。当对某条注册表数据发出请求后,它将按顺序查找,直至找到请求的数据。这意味着,如果 COW 位置中存储有值,它不会继续查找其他位置,但是,如果在 COW 位置中没有数据,则将继续到包,然后到本机位置,直至它找到适当的数据。

注册表位置

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

单个包 VReg:

位置

描述

COW

  • Machine Registry\Client\Packages\PkgGUID\REGISTRY(仅提升过程可写入)

  • User Registry\Client\Packages\PkgGUID\REGISTRY(HKCU 下写入的用户漫游内容,除了 Software\Classes)

  • User Registry Classes\Client\Packages\PkgGUID\REGISTRY(HKCU\Software\Classes 写入和非提升过程的 HKLM)

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

  • User Registry Classes\Client\Packages\PkgGUID\Versions\VerGUID\Registry

本机

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

 

连接组 VReg:

位置

描述

COW

  • Machine Registry\Client\PackageGroups\GrpGUID\REGISTRY(仅提升过程可写入)

  • User Registry\Client\PackageGroups\GrpGUID\REGISTRY(写入 HKCU 的任何内容,除了 Software\Classes)

  • User Registry Classes\Client\PackageGroups\GrpGUID\REGISTRY

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

  • User Registry Classes\Client\PackageGroups\GrpGUID\Versions\VerGUID\REGISTRY

本机

  1. 本机应用程序注册表位置

 

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

通道密钥

通道密钥使管理员能够配置某些密钥,以便他们能够仅从本机注册表读取它们,而绕过包和 COW 位置。通道位置对计算机是全局的(不特定于包),可以通过将路径添加到密钥进行配置,这应被视为 REG_MULTI_SZ 值(称为密钥 HKLM\Software\Microsoft\AppV\Subsystem\VirtualRegistryPassThroughPaths)的通道。此多字符串值(以及它们的子级)下显示的任何密钥将被视为通道。

默认情况下,以下位置配置为通道位置:

  • 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 包。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 和手机网络进行流式传输

AutoLoad

指定背景负载设置:

  • 0 - 禁用

  • 1 – 仅之前用过的包

  • 2 – 所有包

PackageInstallationRoot

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

PackageSourceRoot

根重写应从中流式传输包的位置

SharedContentStoreMode

允许使用 VDI 方案的共享内容存储

 

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

  • 后台流式传输

  • 优化的流式传输

  • 流故障

后台流式传输

PowerShell cmdlet Get-AppvClientConfiguration 可用于确定当前模式是使用 AutoLoad 设置进行后台流式传输,还是使用 cmdlet Set-AppvClientConfiguration 或从注册表 (HKLM\SOFTWARE\Microsoft\AppV\ClientStreaming key) 进行修改。后台流式传输是默认设置,在该模式下,Autoload 设置设置为下载之前用过的包。启动应用程序后,基于默认设置的行为(值 = 1)在后台下载 App-V 数据块。可同时为所有包禁用(值 = 0)或启用(值 = 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%,但不漫游用户的配置文件(注册表),反之亦然。

note备注
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\Local\Microsoft\AppV\Client\VFS\<GUID>\ProgramFilesX86

SystemX86

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

Windows

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

appv_ROOT

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

AppData

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

 

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

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

ProgramFilesX86

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

SystemX86

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

Windows

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

appv_ROOT

C:\users\jsmith\AppData\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 路径是本地路径或没有映射任何 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 文件将提取到用户配置文件中的本地 Temp 目录中。

  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 客户端的计算机上启动的 PowerShell 命令执行 App-V 客户端操作。

本文档侧重介绍 App-V 完整基础结构解决方案。有关 App-V 与 Configuration Manager 2012 集成的特定信息,请访问:https://go.microsoft.com/fwlink/?LinkId=392773

App-V 应用程序生命周期任务在用户登录(默认)、计算机启动时或作为后台定时操作触发。在客户端设置过程中或设置后使用 PowerShell 命令配置 App-V 客户端操作的设置,包括发布服务器、刷新间隔、包脚本启用及其他。请参阅 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 包是发布刷新过程的第一步。最终结果与 PowerShell 中的 Add-AppVClientPackage 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 中定义的发布块数据。将发布块数据存储在 Package Store\PkgGUID\VerGUID\Root 中。

      • 图标:扩展点的目标。

      • 可移植可执行标头(PE 标头):包含有关直接访问或通过文件类型访问磁盘上的图像所需的基本信息的扩展点的目标。

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

    4. 填充包存储区:

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

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

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

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

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

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

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

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

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

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

    note备注
    这将不执行包删除而是删除特定目标(用户或计算机)的集成点,并删除用户目录文件(全局发布的计算机目录文件)。

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

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

    note备注
    在不取消发布时进行删除将发生这种情况,并且将在后台添加包。

这样就完成了发布刷新过程的 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. 将备份信息存储在用户的注册表和漫游配置文件(快捷方式备份)中。

      note备注
      如果取消发布包,这会还原扩展点。

    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. 执行集成任务。

    1. 集成清单和动态配置文件的扩展点 (EP)。
    1. 使用包存储区的接合点将基于文件的 EP 数据存储在 AppData 文件夹中。

    2. 新版本可用时,版本 1 EP 已经存在。

    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 服务器或外壳扩展。

管理员发布较新版本的包以及在下次启动包中的组件或应用程序时运行升级。新版本的包被流式传输并运行。自之前的 App-V 5 版本起,App-V 5 SP2 中的此情景没有变化。

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

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

如果包应用程序正在使用中,用户将关闭虚拟应用程序,其后发生升级。

如果包有外壳扩展 (Office 2013)(由 Windows 资源管理器永久加载),用户不能登录。用户必须注销然后重新登录以启动 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 包传输到另一个。这将不启动数据或注册表的还原。

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

扩展点

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

  • 快捷方式

  • 文件类型关联

  • 外壳扩展

  • COM

  • 软件客户端

  • 应用程序功能

  • URL 协议处理程序

  • AppPath

  • 虚拟应用程序

快捷方式

该快捷方式是与操作系统集成的基本元素之一,是直接用户启动 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>
note备注
在此示例中:

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

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

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

外壳扩展

在序列化过程中,外壳扩展自动嵌入包中。全局发布包时,外壳扩展为用户提供相同的功能,好像在本地安装应用程序一样。应用程序不需要对客户端进行额外的设置或配置,就能启用外壳扩展功能。

使用外壳扩展的要求:

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

  • 应用程序、排序器和 App-V 客户端的位数必须一致,否则外壳扩展不起作用。例如:

    • 应用程序是 64 位版本。

    • 排序器在 64 位计算机上运行。

    • 包将被传输到 64 位 APP-V 客户端计算机。

下表显示支持的外壳扩展:

处理程序 描述

上下文菜单处理程序

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

拖放处理程序

控制右击拖放时的动作,修改出现的上下文菜单。

放下目标处理程序

控制数据目标被拖放到放置目标(例如文件)时的动作。

数据目标处理程序

控制文件被复制到剪贴板或被拖放到放置目标时的动作。它可以提供为放置目标提供额外的剪贴板格式。

属性表处理程序

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

Infotip 处理程序

允许为一个项目检索标志和 infotip 信息,并在悬停鼠标时在弹出工具提示内进行显示。

栏处理程序

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

预览处理程序

启用要在 Windows 资源管理器预览窗格中显示的文件的预览。

COM

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

App-V 支持通过两个流程类型将 COM 对象从包注册到本地操作系统:过程外和过程内。注册 COM 对象是通过特定 App-V 包的一个操作模式或多个操作模式的组合完成,其中包含关闭、独立和集成。为过程外或过程内类型配置集成模式。使用动态配置文件(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>
note备注
在此示例中:

  • <ClientConfiguration EmailEnabled="true" /> 是集成电子邮件客户端的总软件客户端设置

  • <EMail MakeDefault="true"> 是用于将特定的电子邮件客户端设置为默认电子邮件客户端的标志

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

URL 协议处理程序

应用程序并不总是利用文件类型调用的专门调用虚拟化应用程序。例如,在支持嵌入邮寄地址的应用程序中:链接到文档或网页中,用户单击邮寄地址:链接并预期获得其已注册邮件客户端。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)。

扩展点的发布方式并不相同,其中一些扩展点将需要全局发布,另外的则需要在交付它们的特定操作系统和体系结构上进行序列化。下表描述了这两个关键规则。

虚拟扩展 需要目标操作系统序列化 需要全局发布

Shortcut

文件类型关联

URL 协议

X

AppPaths

X

COM 模式

软件客户端

X

应用程序功能

X

X

上下文菜单处理程序

X

X

拖放处理程序

X

数据目标处理程序

X

属性表处理程序

X

Infotip 处理程序

X

栏处理程序

X

外壳扩展

X

浏览器帮助程序对象

X

X

Active X 对象

X

X

动态配置处理

将 App-V 包部署到一台计算机或一个用户非常简单。但是,随着组织跨业务行以及地理和政治边界部署 AppV 应用程序,无法一次使用一组设置序列化应用程序。App-V 正是为这种情景而设计,这是因为它在清单文件中进行序列化过程中捕获特定的设置和配置,还支持通过动态配置文件进行修改。

通过 App-V 动态配置,可在计算机级别或在用户级别为包指定策略。通过动态配置文件,序列化工程师能够在序列化后修改包,满足各个用户或计算机组的需要。在某些情况下可能需要对应用程序进行修改,以在 App-V 环境中提供正确功能。例如,可能需要对 _*config.xml 文件进行修改,以便在应用程序运行期间的指定时间执行某些操作,例如,禁用邮寄地址扩展以防止虚拟化应用程序覆盖另一个应用程序的该扩展。

App-V 包包含 appv 包文件中的清单文件,它代表序列化操作并且是一个选择策略,除非为特定包分配了动态配置文件。序列化后,可以对动态配置文件进行修改,以允许将应用程序发布到具有不同扩展点的不同台式机或用户。这两个动态配置文件是动态部署配置 (DDC) 和动态用户配置 (DUC) 文件。本部分重点介绍清单和动态配置文件的组合。

动态配置文件的示例

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

清单

<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:lcon>[{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:lcon>[{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 排序器不会捕获序列化工作站上已经存在的程序集,使限制为每个包一位版本的程序集专有化。此行为导致部署到客户端的 App-V 应用程序缺少所需的 SxS 程序集,从而导致应用程序启动失败。这将强制打包过程以记录并确保程序包所需的全部程序集已本地安装在用户的客户端操作系统上,从而确保对虚拟应用程序提供支持。由于程序集的数量庞大以及缺少所需依存关系的应用程序文档,此任务充满管理和实施挑战。

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

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

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

  • 排序器在排序器报告机制中报告 VC 运行时依赖项。

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

自动发布 SxS 程序集

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

note备注
取消发布或删除具有程序集的包不会删除该包的程序集。

客户端日志记录

App-V 客户端以标准 ETW 格式将信息记录到 Windows 事件日志中。可在事件查看器中的 Applications and Services Logs\Microsoft\AppV\Client 下找到特定的 App-V 事件。

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

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

有关已移动日志的列表,请参阅 App-V event logs have been consolidated

记录有三种具体类别事件,如下所述。

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

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

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

想对 App-V 提建议?

此处添加建议或参与投票。有关 App-V 的问题,请使用 App-V TechNet Forum(App-V TechNet 论坛)

-----
你可以在 TechNet Library(TechNet 库)中详细了解 MDOP、在 TechNet Wiki 上搜索疑难解答,或者在 FacebookTwitter 上了解我们的最新动态。
-----