关于 App-V 5.1 动态配置
使用动态配置,可以编辑动态配置文件,以自定义 App-V 5.1 包为用户或组运行的方式。 包自定义消除了使用所需设置重新序列包的需要。 它还提供了一种使包内容和自定义设置保持独立的方法。
虚拟应用程序包包含一个清单,该清单提供包的所有核心信息。 此信息包括包设置的默认值,并确定最基本的设置, (没有其他自定义) 。
创建包时,排序器将使用包清单数据自动生成默认部署和用户配置 .xml 文件。 因此,这些生成的文件反映了在排序期间配置的默认设置。 如果以排序器生成的格式将这些文件应用于包,则包具有来自其清单的相同默认设置。
如有必要,使用这些生成的文件进行更改,这不会直接影响包。 如果要添加、删除或更新配置文件,请对清单信息中的默认值进行更改。
提示
文件的读取顺序如下:
- UserConfig.xml
- DeploymentConfig.xml
- Manifest
第一个条目表示最后读取的内容。 因此,其内容优先,并且所有包本身都包含包清单中的默认设置并提供默认设置。
- 如果自定义 DeploymentConfig.xml 文件并应用自定义设置,则会重写包清单中的默认设置。
- 如果自定义 UserConfig.xml 并应用自定义设置,则会重写部署配置和包清单的默认设置。
用户配置文件内容 (UserConfig.xml)
UserConfig 文件提供在将包部署到运行 App-V 5.1 客户端的计算机时应用于特定用户的配置设置。 这些设置不会影响客户端上的任何其他用户。
使用 UserConfig 文件指定或修改包的自定义设置:
- 集成到每个用户的本机系统中的扩展:快捷方式、文件类型关联、URL 协议、AppPath、软件客户端和 COM
- 虚拟子系统:应用程序对象、环境变量、注册表修改、服务和字体
- 仅) 用户上下文 (脚本
- 管理用于控制包与 App-V 4.6) 并存的授权 (
标题
动态用户配置文件的标头如下所示:
<?xml version="1.0" encoding="utf-8"?><UserConfiguration PackageId="1f8488bf-2257-46b4-b27f-09c9dbaae707" DisplayName="Reserved" xmlns="http://schemas.microsoft.com/appv/2010/userconfiguration">
PackageId 与清单文件中存在的值相同。
正文
动态用户配置文件的正文可以包括清单文件中定义的所有应用扩展点,以及用于配置虚拟应用程序的信息。 正文中允许有四个子部分:
应用程序
包内清单文件中包含的所有应用扩展都分配有应用程序 ID,可在清单文件中找到该 ID。 应用程序 ID 允许为包中的给定应用程序启用或禁用所有扩展。 应用程序 ID 必须存在于清单文件中,否则将被忽略。
<UserConfiguration PackageId="1f8488bf-2257-46b4-b27f-09c9dbaae707" DisplayName="Reserved" xmlns="http://schemas.microsoft.com/appv/2010/userconfiguration">
<Applications>
<!--No new application can be defined in policy. AppV Client will ignore any application ID that is not also in the Manifest file-->
<Application Id="{a56fa627-c35f-4a01-9e79-7d36aed8225a}" Enabled="false">
</Application>
</Applications>
..
</UserConfiguration>
子系统
AppExtensions 和其他子系统以子节点的形式排列。
<UserConfiguration PackageId="1f8488bf-2257-46b4-b27f-09c9dbaae707" DisplayName="Reserved" xmlns="http://schemas.microsoft.com/appv/2010/userconfiguration">
<Subsystems>
..
</Subsystems>
..
</UserConfiguration>
可以使用 Enabled 属性启用或禁用每个子系统。
扩展
某些子系统 (扩展子系统) 控制扩展。 这些子系统是快捷方式、File-Type 关联、URL 协议、AppPath、软件客户端和 COM。
可以独立于内容启用和禁用扩展子系统。 例如,如果启用“快捷方式”,则客户端默认使用清单中包含的快捷方式。 每个扩展子系统可以包含一个 <扩展> 节点。 如果存在此子元素,客户端将忽略该子系统的清单文件中的内容,并且仅使用配置文件中的内容。
例子:
如果在用户或部署配置文件中定义此项,则会忽略清单中的内容。
<Shortcuts Enabled="true"\> <Extensions> ... </Extensions> </Shortcuts>
如果仅定义以下内容,则会在发布期间集成清单中的内容。
<Shortcuts Enabled="true"/>
如果定义以下内容,清单中的所有快捷方式仍会被忽略。 换句话说,没有集成快捷方式。
<Shortcuts Enabled="true"> <Extensions/> </Shortcuts>
支持的扩展子系统:
快捷方式 扩展子系统控制将哪些快捷方式集成到本地系统中。
<Subsystems>
<Shortcuts Enabled="true">
<Extensions>
<Extension Category="AppV.Shortcut">
<Shortcut>
<File>[{Common Programs}]\Microsoft Contoso\Microsoft ContosoApp Filler 2010.lnk</File>
<Target>[{PackageRoot}]\Contoso\ContosoApp.EXE</Target>
<Icon>[{Windows}]\Installer\{90140000-0011-0000-0000-0000000FF1CE}\inficon.exe</Icon>
<Arguments />
<WorkingDirectory />
<AppUserModelId>ContosoApp.Filler.3</AppUserModelId>
<Description>Fill out dynamic forms to gather and reuse information throughout the organization using Microsoft ContosoApp.</Description>
<Hotkey>0</Hotkey>
<ShowCommand>1</ShowCommand>
<ApplicationId>[{PackageRoot}]\Contoso\ContosoApp.EXE</ApplicationId>
</Shortcut>
</Extension>
<Extension Category="AppV.Shortcut">
<Shortcut>
<File>[{AppData}]\Microsoft\Contoso\Recent\Templates.LNK</File>
<Target>[{AppData}]\Microsoft\Templates</Target>
<Icon />
<Arguments />
<WorkingDirectory />
<AppUserModelId />
<Description />
<Hotkey>0</Hotkey>
<ShowCommand>1</ShowCommand>
<!-- Note the ApplicationId is optional -->
</Shortcut>
</Extension>
</Extensions>
</Shortcuts>
文件类型 关联 扩展子系统将文件类型与要默认打开的程序相关联,并设置上下文菜单。
提示
可以使用 MIME 类型设置子系统。
<FileTypeAssociations Enabled="true">
<Extensions>
<Extension Category="AppV.FileTypeAssociation">
<FileTypeAssociation>
<FileExtension MimeAssociation="true">
<Name>.docm</Name>
<ProgId>contosowordpad.DocumentMacroEnabled.12</ProgId>
<PerceivedType>document</PerceivedType>
<ContentType>application/vnd.ms-contosowordpad.document.macroEnabled.12</ContentType>
<OpenWithList>
<ApplicationName>wincontosowordpad.exe</ApplicationName>
</OpenWithList>
<OpenWithProgIds>
<ProgId>contosowordpad.8</ProgId>
</OpenWithProgIds>
<ShellNew>
<Command />
<DataBinary />
<DataText />
<FileName />
<NullFile>true</NullFile>
<ItemName />
<IconPath />
<MenuText />
<Handler />
</ShellNew>
</FileExtension>
<ProgId>
<Name>contosowordpad.DocumentMacroEnabled.12</Name>
<DefaultIcon\>[{Windows}]\Installer\{90140000-0011-0000-0000-000000FF1CE}\contosowordpadicon.exe,15</DefaultIcon>
<Description>Blah Blah Blah</Description>
<FriendlyTypeName>[{FOLDERID_ProgramFilesX86}]\Microsoft Contoso 14\res.dll,9182</FriendlyTypeName>
<InfoTip>[{FOLDERID_ProgramFilesX86}]\Microsoft Contoso 14\res.dll,1424</InfoTip>
<EditFlags>0</EditFlags>
<ShellCommands>
<DefaultCommand>Open</DefaultCommand>
<ShellCommand>
<ApplicationId>{e56fa627-c35f-4a01-9e79-7d36aed8225a}</ApplicationId>
<Name>Edit</Name>
<FriendlyName>&Edit</FriendlyName>
<CommandLine>"[{PackageRoot}]\Contoso\WINcontosowordpad.EXE" /vu "%1"</CommandLine>
</ShellCommand>
</ShellCommand>
<ApplicationId>{e56fa627-c35f-4a01-9e79-7d36aed8225a}</ApplicationId>
<Name>Open</Name>
<FriendlyName>&Open</FriendlyName>
<CommandLine>"[{PackageRoot}]\Contoso\WINcontosowordpad.EXE" /n "%1"</CommandLine>
<DropTargetClassId />
<DdeExec>
<Application>mscontosowordpad</Application>
<Topic>ShellSystem</Topic>
<IfExec>[SHELLNOOP]</IfExec>
<DdeCommand>[SetForeground][ShellNewDatabase"%1"]</DdeCommand>
</DdeExec>
</ShellCommand>
</ShellCommands>
</ProgId>
</FileTypeAssociation>
</Extension>
</Extensions>
</FileTypeAssociations>
URL 协议 扩展子系统控制集成到客户端计算机本地注册表中的 URL 协议,例如 mailto:。
<URLProtocols Enabled="true">
<Extensions>
<Extension Category="AppV.URLProtocol">
<URLProtocol>
<Name>mailto</Name>
<ApplicationURLProtocol>
<DefaultIcon>[{ProgramFilesX86}]\MicrosoftContoso\Contoso\contosomail.EXE,-9403</DefaultIcon>
<EditFlags>2</EditFlags>
<Description />
<AppUserModelId />
<FriendlyTypeName />
<InfoTip />
<SourceFilter />
<ShellFolder />
<WebNavigableCLSID />
<ExplorerFlags>2</ExplorerFlags>
<CLSID />
<ShellCommands>
<DefaultCommand>open</DefaultCommand>
<ShellCommand>
<ApplicationId>[{ProgramFilesX86}]\Microsoft Contoso\Contoso\contosomail.EXE</ApplicationId>
<Name>open</Name>
<CommandLine>[{ProgramFilesX86}\Microsoft Contoso\Contoso\contosomail.EXE" -c OEP.Note /m "%1"</CommandLine>
<DropTargetClassId />
<FriendlyName />
<Extended>0</Extended>
<LegacyDisable>0</LegacyDisable>
<SuppressionPolicy>2</SuppressionPolicy>
<DdeExec>
<NoActivateHandler />
<Application>contosomail</Application>
<Topic>ShellSystem</Topic>
<IfExec>[SHELLNOOP]</IfExec>
<DdeCommand>[SetForeground][ShellNewDatabase "%1"]</DdeCommand>
</DdeExec>
</ShellCommand>
</ShellCommands>
</ApplicationURLProtocol>
</URLProtocol>
</Extension>
</Extension>
</URLProtocols>
软件客户端 扩展子系统允许应用注册为电子邮件客户端、新闻阅读器、媒体播放器,并使应用在“设置程序访问”和“计算机默认”UI 中可见。 在大多数情况下,只需启用和禁用它。 还有一个控件可以启用和禁用电子邮件客户端,具体来说,如果你希望除该客户端以外的其他客户端仍然启用。
<SoftwareClients Enabled="true">
<ClientConfiguration EmailEnabled="false" />
</SoftwareClients>
AppPaths 扩展子系统打开已注册到应用程序路径的应用。 例如,如果 contoso.exe 的 apppath 名称为 myapp,则用户可以从运行菜单中键入 myapp ,打开 contoso.exe。
<AppPaths Enabled="true">
<Extensions>
<Extension Category="AppV.AppPath">
<AppPath>
<ApplicationId>[{ProgramFilesX86}]\Microsoft Contoso\Contoso\contosomail.EXE</ApplicationId>
<Name>contosomail.exe</Name>
<ApplicationPath>[{ProgramFilesX86}]\Microsoft Contoso\Contoso\contosomail.EXE</ApplicationPath>
<PATHEnvironmentVariablePrefix />
<CanAcceptUrl>false</CanAcceptUrl>
<SaveUrl />
</AppPath>
</Extension>
</Extensions>
</AppPaths>
COM 扩展子系统允许注册到本地 COM 服务器的应用程序。 模式可以是:
- 集成
- 孤立
- 关闭
<COM Mode="Isolated"/>
虚拟内核对象
<Objects Enabled="false" />
虚拟注册表 在 HKCU 内的虚拟注册表中设置注册表。
<Registry Enabled="true">
<Include>
<Key Path="\REGISTRY\USER\[{AppVCurrentUserSID}]\Software\ABC">
<Value Type="REG_SZ" Name="Bar" Data="NewValue" />
</Key>
<Key Path="\REGISTRY\USER\[{AppVCurrentUserSID}]\Software\EmptyKey" />
</Include>
<Delete>
</Registry>
虚拟文件系统
<FileSystem Enabled="true" />
虚拟字体
<Fonts Enabled="false" />
虚拟环境变量
<EnvironmentVariables Enabled="true">
<Include>
<Variable Name="UserPath" Value="%path%;%UserProfile%" />
<Variable Name="UserLib" Value="%UserProfile%\ABC" />
</Include>
<Delete>
<Variable Name="lib" />
</Delete>
</EnvironmentVariables>
虚拟服务
<Services Enabled="false" />
UserScripts
使用 UserScript 设置或更改虚拟环境。 还可以在部署时执行脚本,或者在应用程序终止后清理环境。 若要查看示例脚本,请参阅排序器生成的用户配置文件。 下面的脚本部分提供了有关可以使用的各种触发器的详细信息。
ManagingAuthority
如果包的两个版本同时存在于同一台计算机上,一个版本部署到 App-V 4.6,另一个版本部署在 App-V 5.0 上,请使用 ManagingAuthority。 若要允许 App-V vNext 接管命名包的 App-V 4.6 扩展点,请在 UserConfig 文件 (,其中 PackageName 是 App-V 4.6 中的包 GUID:
<ManagingAuthority TakeoverExtensionPointsFrom46="true" PackageName="032630c0-b8e2-417c-acef-76fc5297fe81" />
部署配置文件 (DeploymentConfig.xml)
DeploymentConfig 文件为计算机上下文和用户上下文提供配置设置,提供 UserConfig 文件中列出的相同功能。 将包部署到运行 App-V 5.1 客户端的计算机时,将应用此设置。
使用 DeploymentConfig 文件指定或修改包的自定义设置:
- 所有用户配置设置
- 只能全局应用于所有用户的扩展
- 全局计算机位置的虚拟子系统,例如注册表
- 产品源 URL
- 仅 (计算机上下文) 脚本
- 用于终止子进程的控件
标题
动态部署配置文件的标头如下所示:
<?xml version="1.0" encoding="utf-8"?><DeploymentConfiguration PackageId="1f8488bf-2257-46b4-b27f-09c9dbaae707" DisplayName="Reserved" xmlns="http://schemas.microsoft.com/appv/2010/deploymentconfiguration">
PackageId 与清单文件中存在的值相同。
正文
动态部署配置文件的正文包括两个部分:
UserConfiguration: 允许与上一部分所述的用户配置文件相同的内容。 向用户发布包时,本节中的任何应用扩展配置设置将覆盖包内清单中的相应设置,除非提供用户配置文件。 如果同时提供 UserConfig 文件,则会使用它,而不是部署配置文件中的用户设置。 如果全局发布包,则只有部署配置文件的内容与清单结合使用。 有关详细信息,请参阅 用户配置文件内容 (UserConfig.xml) 。
MachineConfiguration: 包含只能为整个计算机配置的信息,而不能为计算机上的特定用户配置。 例如,HKEY_LOCAL_MACHINE VFS 中的注册表项。
<DeploymentConfiguration PackageId="1f8488bf-2257-46b4-b27f-09c9dbaae707" DisplayName="Reserved" xmlns="http://schemas.microsoft.com/appv/2010/deploymentconfiguration">
<UserConfiguration>
...
</UserConfiguration>
<MachineConfiguration>
...
</MachineConfiguration>
...
</MachineConfiguration>
</DeploymentConfiguration>
UserConfiguration
有关为本节提供的设置的信息,请参阅 用户配置文件内容 (UserConfig.xml) 。
MachineConfiguration
使用 MachineConfiguration 部分可以配置整个计算机的信息;不适用于计算机上的特定用户。 例如,HKEY_LOCAL_MACHINE虚拟注册表中的注册表项。 此元素下允许有四个子部分:
子系统
AppExtensions 和其他子系统以子节点的形式排列。
<MachineConfiguration>
<Subsystems>
…
</Subsystems>
…
</MachineConfiguration>
可以使用 Enabled 属性启用或禁用每个子系统。
扩展
某些子系统 (扩展子系统) 控制扩展。 子系统是默认程序使用的应用程序功能。 对于此类扩展,必须全局发布包才能集成到本地系统中。 适用于用户配置中扩展的控件和设置的相同规则也适用于 MachineConfiguration 部分中的规则。
应用程序功能:默认使用允许应用程序将自身注册为的程序:
- 能够打开特定的文件扩展名
- 开始菜单 Internet 浏览器槽的竞争者
- 能够打开特定窗口 MIME 类型
此扩展还使虚拟应用程序在“设置默认程序”UI 中可见。
<ApplicationCapabilities Enabled="true">
<Extensions>
<Extension Category="AppV.ApplicationCapabilities">
<ApplicationCapabilities>
<ApplicationId>[{PackageRoot}]\LitView\LitViewBrowser.exe</ApplicationId>
<Reference>
<Name>LitView Browser</Name>
<Path>SOFTWARE\LitView\Browser\Capabilities</Path>
</Reference>
<CapabilityGroup>
<Capabilities>
<Name>@[{ProgramFilesX86}]\LitView\LitViewBrowser.exe,-12345</Name>
<Description>@[{ProgramFilesX86}]\LitView\LitViewBrowser.exe,-12346</Description>
<Hidden>0</Hidden>
<EMailSoftwareClient>Lit View E-Mail Client</EMailSoftwareClient>
<FileAssociationList>
<FileAssociation Extension=".htm" ProgID="LitViewHTML" />
<FileAssociation Extension=".html" ProgID="LitViewHTML" />
<FileAssociation Extension=".shtml" ProgID="LitViewHTML" />
</FileAssociationList>
<MIMEAssociationList>
<MIMEAssociation Type="audio/mp3" ProgID="LitViewHTML" />
<MIMEAssociation Type="audio/mpeg" ProgID="LitViewHTML" />
</MIMEAssociationList>
<URLAssociationList>
<URLAssociation Scheme="http" ProgID="LitViewHTML.URL.http" />
</URLAssociationList>
</Capabilities>
</CapabilityGroup>
</ApplicationCapabilities>
</Extension>
</Extensions>
</ApplicationCapabilities>
支持的扩展子系统:
计算机宽虚拟注册表 扩展子系统在HKEY_Local_Machine内的虚拟注册表中设置注册表项。
<Registry>
<Include>
<Key Path="\REGISTRY\\Machine\Software\ABC">
<Value Type="REG_SZ" Name="Bar" Data="Baz" />
</Key>
<Key Path="\REGISTRY\Machine\Software\EmptyKey" />
</Include>
<Delete>
</Registry>
计算机范围虚拟内核对象
<Objects>
<NotIsolate>
<Object Name="testObject" />
</NotIsolate>
</Objects>
ProductSourceURLOptOut
使用 ProductSourceURLOptOut 指示可以通过 PackageSourceRoot (全局修改包的 URL,以支持分支机构方案) 。 更改将在下一次发布时生效。
<MachineConfiguration>
...
<ProductSourceURLOptOut Enabled="true" />
...
</MachineConfiguration>
MachineScripts
可以将包配置为在部署、发布或删除时执行脚本。 若要查看示例脚本,请参阅 sequencer 生成的部署配置文件。
下面的脚本部分提供了有关可以使用的各种触发器的详细信息。
TerminateChildProcess
可以指定应用程序可执行文件,其子进程在应用程序执行进程终止时终止。
<MachineConfiguration>
...
<TerminateChildProcesses>
<Application Path="[{PackageRoot}]\Contoso\ContosoApp.EXE" />
<Application Path="[{PackageRoot}]\LitView\LitViewBrowser.exe" />
<Application Path="[{ProgramFilesX86}]\Microsoft Contoso\Contoso\contosomail.EXE" />
</TerminateChildProcesses>
...
</MachineConfiguration>
脚本
下表描述了各种脚本事件以及可在其中运行这些事件的上下文。
脚本执行时间 | 可在部署配置中指定 | 可在用户配置中指定 | 可以在包的虚拟环境中运行 | 可以在特定应用程序的上下文中运行 | 在系统/用户上下文中运行: (部署配置、用户配置) |
---|---|---|---|---|---|
AddPackage | X | (SYSTEM、不适用) | |||
PublishPackage | X | X | (SYSTEM、用户) | ||
UnpublishPackage | X | X | (SYSTEM、用户) | ||
RemovePackage | X | (SYSTEM、不适用) | |||
StartProcess | X | X | X | X | (用户、用户) |
ExitProcess | X | X | X | (用户、用户) | |
StartVirtualEnvironment | X | X | X | (用户、用户) | |
TerminateVirtualEnvironment | X | X | (用户、用户) |
在单个事件触发器上使用多个脚本
App-V 5.1 支持在 App-V 包的单个事件触发器上使用多个脚本,包括从 App-V 4.6 转换为 App-V 5.0 或更高版本的包。 为了允许使用多个脚本,App-V 5.1 使用名为 ScriptRunner.exe 的脚本启动器应用程序,该应用程序作为 App-V 客户端安装的一部分进行安装。
如何在单个事件触发器上使用多个脚本
对于要运行的每个脚本,将该脚本作为参数传递给 ScriptRunner.exe 应用程序。 然后,应用程序将单独运行每个脚本,以及为每个脚本指定的参数。 每个触发器仅使用一个脚本 (ScriptRunner.exe) 。
注意
建议先从命令提示符运行多脚本行,以确保在将参数添加到部署配置文件之前已正确生成所有参数。
示例脚本和参数说明
使用以下示例文件和表,修改部署或用户配置文件以添加要运行的脚本。
<MachineScripts>
<AddPackage>
<Path>ScriptRunner.exe</Path>
<Arguments>
-appvscript script1.exe arg1 arg2 -appvscriptrunnerparameters -wait -timeout=10
-appvscript script2.vbs arg1 arg2
-appvscript script3.bat arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror
</Arguments>
<Wait timeout="40" RollbackOnError="true"/>
</AddPackage>
</MachineScripts>
示例文件中的参数
<AddPackage>
要为其运行脚本的事件触发器的名称,例如添加包或发布包。
<路径>ScriptRunner.exe</Path>
作为 App-V 客户端安装的一部分安装的脚本启动器应用程序。
注意
尽管 ScriptRunner.exe 作为 App-V 客户端的一部分安装,但 App-V 客户端的位置必须位于 %path% 中,否则 ScriptRunner 将不会运行。 ScriptRunner.exe 通常位于 C:FilesApplication Virtualizationfolder 中。
<Arguments>
-appvscript
- 表示要运行的实际脚本的令牌。
script1.exe
- 要运行的脚本的名称。
arg1 arg2
- 要运行的脚本的参数。
-appvscriptrunnerparameters
- 表示 script1.exe 的执行选项的标记。
-wait
- 令牌,通知 ScriptRunner 等待执行 script1.exe 完成,然后再继续下一个脚本。
-timeout=x
- 指示 ScriptRunner 在 x 秒数后停止运行当前脚本的令牌。 所有其他指定的脚本仍运行。
-rollbackonerror
- 通知 ScriptRunner 停止运行所有尚未运行的脚本并将错误回滚到 App-V 客户端的令牌。
<Wait timeout=“40” RollbackOnError=“true”/>
等待 ScriptRunner.exe 完成。
将整个运行器的超时值设置为大于或等于单个脚本上的超时值之和。
如果任何单个脚本报告错误并且 rollbackonerror 设置为 true,则 ScriptRunner 会将错误报告给 App-V 客户端。
ScriptRunner 运行其文件类型与计算机上安装的应用程序关联的任何脚本。 如果缺少关联的应用程序,或者脚本的文件类型未与计算机上的任何应用程序相关联,则脚本不会运行。
使用 App-V 5.1 清单文件创建动态配置文件
可以使用以下三种方法之一创建动态配置文件:使用 App-V 5.1 管理控制台手动创建,或者对包进行排序,这将生成两个示例文件。 有关如何使用 App-V 5.1 管理控制台创建文件的详细信息,请参阅 如何使用 App-V 5.1 管理控制台创建自定义配置文件。
若要手动创建文件,可将上述部分中的信息合并为单个文件。 建议使用排序器生成的文件。