使用虚拟化应用程序在虚拟环境内部运行本地安装的应用程序

可以在虚拟环境中运行本地安装的应用程序,以及使用 Microsoft Application Virtualization (App-V) 进行虚拟化的应用程序。 如果执行以下操作,则可能想要执行此操作:

  • 想要在客户端计算机上本地安装和运行应用程序,但想要虚拟化并运行与该本地应用程序配合使用的特定插件。

  • 对 App-V 客户端包进行故障排除,并希望在 App-V 虚拟环境中打开本地应用程序。

使用以下任一方法在 App-V 虚拟环境中打开本地应用程序:

每个方法基本上完成相同的任务,但某些方法可能比其他方法更适合某些应用程序,具体取决于虚拟化应用程序是否已在运行。

RunVirtual 注册表项

若要将本地安装的应用程序添加到包或连接组的虚拟环境,请将子项添加到 RunVirtual 注册表编辑器中的注册表项,如以下部分所述。

没有可用于管理此注册表项的组策略设置,因此必须使用 System Center Configuration Manager 或其他电子软件分发 (ESD) 系统,或手动编辑注册表。

使用 RunVirtual 时支持发布包的方法

App-V 版本 支持的发布方法

App-V 5.0 SP3

全局发布或用户

App-V 5.0 到 App-V 5.0 SP2

仅在全球发布

创建子项的步骤

  1. 使用下表中的信息,使用可执行文件的名称(例如, MyApp.exe)创建新的注册表项。

    包发布方法 在何处创建注册表项

    全局发布

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppV\Client\RunVirtual

    示例:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppV\Client\RunVirtual\MyApp.exe

    发布到用户

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\AppV\Client\RunVirtual

    示例:HKEY_CURRENT_USER \SOFTWARE\Microsoft\AppV\Client\RunVirtual\MyApp.exe

    连接组可以包含:

    • 仅全局发布或仅发布给用户的包

    • 全局发布并发布给用户的包

    HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER键,但以下所有内容都必须为 true:

    • 如果要在虚拟环境中包含多个包,则必须将其包含在已启用的连接组中。

    • 仅为连接组中的一个包创建一个子项。 例如,如果有一个程序包全局发布,另一个包已发布给用户,则为其中任一个包创建子项,但不能同时为这两个包创建子项。 尽管只为其中一个包创建子项,但连接组中的所有包以及本地应用程序都可在虚拟环境中使用。

    • 创建子项的密钥必须与用于包的发布方法匹配。

      例如,如果将包发布给用户,则必须在下面 HKEY_CURRENT_USER\SOFTWARE\Microsoft\AppV\Client\RunVirtual创建子项。

  2. 将新的注册表子项的值设置为包的 PackageId 和 VersionId,用下划线分隔值。

    语法: <PackageId>_<VersionId>

    示例:4c909996-afc9-4352-b606-0b74542a09c1_be463724-Oct1-48f1-8604-c4bd7ca92fa

    上一示例中的应用程序将生成注册表导出文件 (.reg 文件) 如下所示:

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppV\Client\RunVirtual]
    @=""
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AppV\Client\RunVirtual\MyApp.exe]
    @="aaaaaaaa-bbbb-cccc-dddd-eeeeeeee_11111111-2222-3333-4444-555555555
    

Get-AppvClientPackage PowerShell cmdlet

可以使用 Start-AppVVirtualProcess cmdlet 检索包名称,然后在指定包的虚拟环境中启动进程。 此方法允许在 App-V 包的上下文中启动任何命令,而不考虑包当前是否正在运行。

使用以下示例语法,并将包的名称替换为 <包>

$AppVName = Get-AppvClientPackage <Package>

Start-AppvVirtualProcess -AppvClientObject $AppVName cmd.exe

如果不知道包的确切名称,可以使用命令行 Get-AppvClientPackage *executable\,其中 *executable 是应用程序的名称,例如:Get-AppvClientPackage *Word*。

命令行开关 /appvpid:<PID>

可以将 /appvpid:<PID> 开关应用到任何命令,使该命令能够通过指定其进程 ID (PID) 在所选的虚拟进程中运行。 使用此方法会在已运行的可执行文件所在的同一 App-V 环境中启动新的可执行文件。

示例:cmd.exe /appvpid:8108

若要查找 App-V 进程的进程 ID (PID) ,请从提升的命令提示 符运行命令tasklist.exe

命令行挂钩开关 /appvve:<GUID>

此开关允许你在 App-V 包的虚拟环境中运行本地命令。 与 /appvid 交换机(其中必须已运行虚拟环境)不同,此交换机使你能够启动虚拟环境。

语法: cmd.exe /appvve:<PACKAGEGUID_VERSIONGUID>

示例:cmd.exe /appvve:aaaaaaaa-bbbb-cccc-dddd-eeeeeeee_11111111-2222-3333-4444-55555555

若要获取应用程序的包 GUID 和版本 GUID,请运行 Get-AppvClientPackage cmdlet。 使用以下内容连接 /appvve 开关:

  • 冒号

  • 所需包的包 GUID

  • 下划线

  • 所需包的版本 ID

如果不知道包的确切名称,请使用命令行 Get-AppvClientPackage *executable\,其中 *executable 是应用程序的名称,例如:Get-AppvClientPackage *Word*。

此方法允许在 App-V 包的上下文中启动任何命令,而不考虑包当前是否正在运行。

App-V 5.0 技术参考