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

适用范围

  • Windows 7 SP1
  • Windows 10
  • Windows 11
  • Windows Server 2012 R2
  • Windows Server 2016

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

  • 希望在客户端计算机上本地安装并运行应用程序,但希望虚拟化并运行与该本地应用程序一起使用的特定插件。

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

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

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

RunVirtual 注册表项

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

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

从 App-V 5.0 SP3 开始,使用 RunVirtual 时,可以全局或向用户发布包。

创建子项的步骤

  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 键。 但是,必须满足以下所有条件:

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

      • 仅为连接组中的一个包创建一个子项。 例如,你有一个全局发布的包,另一个包发布到用户。 为这两个包中的任何一个创建子项,但不能同时创建子项。 虽然仅为其中一个包创建子项,但连接组中的所有包以及本地应用程序都将在虚拟环境中可用。

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

        例如,如果将包发布到用户,则必须在 下 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 Windows PowerShell cmdlet

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

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

$AppVName = Get-AppvClientPackage <Package>

Start-AppvVirtualProcess -AppvClientObject $AppVName cmd.exe

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

命令行开关 /appvpid:<PID>

可以将 开关应用于 /appvpid:<PID> 任何命令,这样该命令就可以在所选的虚拟进程中运行,方法是 (PID) 指定其进程 ID。 使用此方法会在与已在运行的可执行文件相同的 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 YourExecutable,其中 YourExecutable 是应用程序的名称。 例如,输入 Get-AppvClientPackage Word

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

App-V 的技术参考