关于 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 协议、AppPaths、软件客户端和 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 属性启 用 或禁用每个子系统。
Extensions
某些子系统 (扩展子系统) 控制扩展。 这些子系统是快捷方式、File-Type关联、URL 协议、AppPaths、软件客户端和 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>
软件客户 端扩展子系统允许应用注册为电子邮件客户端、新闻阅读器、媒体播放器,并使应用在 Set 程序访问和计算机默认 UI 中可见。 在大多数情况下,你只需启用和禁用它。 还有一个控件用于启用和禁用电子邮件客户端,具体而言,如果你希望其他客户端仍然启用,但该客户端除外。
<SoftwareClients Enabled="true">
<ClientConfiguration EmailEnabled="false" />
</SoftwareClients>
AppPaths 扩展子系统打开注册了应用程序路径的应用。 例如,如果contoso.exe具有应用路径名称 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
使用 UserScripts 设置或更改虚拟环境。 还可以在部署时执行脚本,也可以在应用程序终止后清理环境。 若要查看示例脚本,请参阅序列化程序生成的用户配置文件。 下面的“脚本”部分提供了有关可使用的各种触发器的详细信息。
ManagingAuthority
当两个版本的包在同一台计算机上共存时,请使用 ManagingAuthority,一个版本部署到 App-V 4.6,另一个部署在 App-V 5.0 上。 若要允许 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 文件指定或修改包的自定义设置:
- 所有 UserConfig 设置
- 只能为所有用户全局应用的扩展
- 全局计算机位置的虚拟子系统,例如注册表
- 产品源 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 属性启 用 或禁用每个子系统。
Extensions
某些子系统 (扩展子系统) 控制扩展。 子系统是默认程序使用的应用程序功能。 对于此类扩展,必须全局发布包才能集成到本地系统。 适用于用户配置中的扩展的控件和设置的相同规则也适用于 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
包可配置为在部署、发布或删除时执行脚本。 若要查看示例脚本,请参阅序列化器生成的部署配置文件。
下面的“脚本”部分提供了有关可使用的各种触发器的详细信息。
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 | (系统、N/A) | |||
PublishPackage | X | X | (SYSTEM,用户) | ||
UnpublishPackage | X | X | (SYSTEM,用户) | ||
RemovePackage | X | (系统、N/A) | |||
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 客户端的令牌。
<等待超时=“40”RollbackOnError=“true”/>
等待ScriptRunner.exe的全面完成。
将总体运行器的超时值设置为大于或等于单个脚本上的超时值之和。
如果任何单个脚本报告错误并将回滚错误设置为 true,则 ScriptRunner 会将错误报告给 App-V 客户端。
ScriptRunner 运行其文件类型与计算机上安装的应用程序关联的任何脚本。 如果缺少关联的应用程序,或者脚本的文件类型未与计算机上的任何应用程序关联,则该脚本不会运行。
使用 App-V 5.1 清单文件创建动态配置文件
可以使用以下三种方法之一创建动态配置文件:手动使用 App-V 5.1 管理控制台或对生成两个示例文件的包进行排序。 有关如何使用 App-V 5.1 管理控制台创建文件的详细信息,请参阅: 如何使用 App-V 5.1 管理控制台创建自定义配置文件。
若要手动创建文件,可将上述部分中的信息组合到单个文件中。 建议使用序列化程序生成的文件。
对于 App-V 问题,请使用 App-V TechNet 论坛。