使用 VBoxManage guestcontrol 从 Ubuntu 23.04/23.10 在 Windows 10 虚拟机上打开应用程序

使用 VBoxManage guestcontrol 从 Ubuntu 23.04/23.10 在 Windows 10 虚拟机上打开应用程序

VBoxManage guestcontrol [vmname] 运行/启动

我成功打开计算器在我的 Ubuntu 23.04 主机上的 Windows 10 客户虚拟机上使用以下命令:

VBoxManage guestcontrol $MY_VM_NAME run --exe "C:\\Windows\\System32\\calc.exe" --username $MY_USERNAME --password $MY_PASSWORD

问题

然而,当对写字板Microsoft Office 应用程序或者Adobe Acrobat 阅读器,它不起作用:

VBoxManage guestcontrol $MY_VM_NAME run --exe "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe" --username $MY_USERNAME --password $MY_PASSWORD

注意:runstart给出相同的结果。

细节

在 Ubuntu 主机上,当我执行最后一条命令时,光标闪烁,并且提示符从未返回。在 Windows 10 VM 中,查看任务管理器,我注意到该申请(写字板在这个例子中)出现在后台进程列表。当我尝试使用相同的命令来执行我已转换为 .exe 文件的个人脚本而不是应用程序时,我习惯在客户 Windows“终端”中看到的输出出现在主机 Ubuntu 终端中(请参阅下面的测试部分)。就像客人控制进程尝试将应用程序的输出重定向到主机。但是不知道为什么打开没问题计算器

在此处输入图片描述

使用该--verbose选项返回:

$ VBoxManage guestcontrol $MY_VM_NAME start --verbose --exe "C:\\Windows\\System32\\calc.exe" --username $MY_USERNAME --password $MY_PASSWORD
Executing:
  Image : C:\Windows\System32\calc.exe
  arg[0]: C:\Windows\System32\calc.exe
Creating guest session as user 'toto'...
Waiting for guest session to start...
Successfully started guest session (ID 8)
Starting guest process ...
[1284 - Session 8]
Wait result is 'started' (1)
Process successfully started!
Guest session detached

$ VBoxManage guestcontrol $MY_VM_NAME start --verbose --exe "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe" --username $MY_USERNAME --password $MY_PASSWORD
Executing:
  Image : C:\Program Files\Windows NT\Accessories\wordpad.exe
  arg[0]: C:\Program Files\Windows NT\Accessories\wordpad.exe
Creating guest session as user 'toto'...
Waiting for guest session to start...
Successfully started guest session (ID 9)
Starting guest process ...
[8812 - Session 9]
Wait result is 'started' (1)
Process successfully started!
Guest session detached

Ubuntu、Windows 和 VirtualBox 测试版本

我对 VirtualBox v6.1 和 v7.0 都得到了相同的结果。我也尝试过从Win10_21H2_English_x64.iso和创建的虚拟机Win10_22H2_English_x64v1.iso。但是,无论 VirtualBox 版本是什么,如果我使用Ubuntu 22.04,那么它就可以完美运行。

编辑 1:完全相同的行为Ubuntu 23.10Ubuntu 23.04

编辑2:问题仍然存在VirtualBox v7.0.12

测试

我创建了一个 HelloWorld 脚本,并将其转换为客户机上的可执行文件。在主机上,当我执行

toto@toto-pc:~$ VBoxManage guestcontrol $MY_VM_NAME run --exe "C:\\Users\\Toto\\Desktop\\runapp\\runHello.exe" --username $MY_USERNAME --password $MY_PASSWORD
Hello, World!
toto@toto-pc:~$

请注意,“Hello, World!”出现在我的主机终端而不是客户机的终端中。

答案1

前言

这个答案仅供参考,并不旨在完全解决问题......尽管如此,它可能是。

Ubuntu 方面的情况

该实用程序有两个类似的命令guestcontrolrun它们start略有不同......来自文档VBoxManage 访客控制

在客户机上运行命令

VBoxManage 访客控制
运行 [--arg0=参数 0] [--domain=域名] [--dos2unix]
[--exe =文件名] [--ignore-orphaned-processes] [--no-wait-stderr|
--wait-stderr ] [--no-wait-stdout | --wait-stdout ] [--passwordfile=密码文件 | --password=密码 ] [--profile] [--putenv=var-name=[值]] [--quiet] [--timeout=msec] [--unix2dos]
[--unquoted-args] [--username=用户名] [--verbose]

VBoxManage guestcontrol vmname 运行命令可让您在客户虚拟机上执行程序。标准输入、标准输出和标准错误会从虚拟机重定向到主机系统,直到程序完成。

... 和:

在客户机上启动命令

VBoxManage guestcontrol start [--arg0=参数 0] [--domain=域名]
[--exe =文件名] [--忽略孤立进程] [
--passwordfile=密码文件 | --password=密码 ] [--profile] [--putenv=var-name=[值]] [--quiet] [--timeout=msec]
[--unquoted-args] [--username=用户名] [--verbose]

VBoxManage guestcontrol 虚拟机名称启动命令使您能够执行客户程序,直到它完成。

...因此,如您所见,您应该使用的是后者IEstart)因为前者将保持客户进程的标准 I/O 流打开,并将其重定向到主机上的终端(或者更准确地说,将它们连接起来)从而导致一些应用程序在启动之前可以接受/期望输入,例如在“写字板”的情况下打开文件参数以保持等待并且不能完全加载并保持主机终端中的提示符……而简单的应用程序如“计算器”似乎不知道这些 I/O 流,会立即断开它们的连接并启动(即,就主机上的进程所知,客户机上的命令已终止,I/O 流已断开,因此终端中的提示符被释放并恢复)。

Windows 方面

存在限制...Windows 操作系统对图形应用程序施加了某些限制。请参阅第 14 章,已知限制... 哪个是:

客人控制. 在 Windows 客户机上,使用客户机控制执行支持启动的进程将无法显示图形用户界面,除非运行该进程的用户帐户当前已登录并具有桌面会话。

... 和:

此外,要使用没有密码或密码为空的帐户,必须更改来宾的组策略。为此,请在命令行中输入 打开组策略编辑器gpedit.msc,打开项“计算机配置\Windows 设置\安全设置\本地策略\安全选项”,然后将“帐户:限制本地帐户使用空白密码只能在控制台登录”的值更改为“已禁用”。

...以及其他实验性功能可能导致影响 GUI 应用程序的问题:

某些 Oracle VM VirtualBox 功能被标记为实验性的。这些功能按“原样”提供,不受正式支持。但是,欢迎提供有关这些功能的反馈和建议。实验性功能的完整列表如下:

  • 为 Windows、Linux 和 Oracle Solaris 客户机提供硬件 3D 加速支持

  • Windows 客户机支持硬件 2D 视频播放加速

  • ICH9 芯片组模拟

  • EFI 固件

  • 在同一主机上使用 Oracle VM VirtualBox 和 Hyper-V

我的建议

使用可用选项--verbose查看实际发生的情况(客户机端的报告可能会受到 Windows 选择报告或不报告的内容的限制)例如这样:

VBoxManage guestcontrol $MY_VM_NAME start --verbose \
--exe "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe" \
--username $MY_USERNAME --password $MY_PASSWORD

答案2

解决方案

问题来自于VirtualBox 客户机附加功能 v7.降级至v6版本解决问题。

细节

  • 主机操作系统:Ubuntu 23.10
  • 客户操作系统:Windows 10
  • VirtualBox:v7.0.10
  1. 在 Windows 10 VM 中,卸载Oracle VM VirtualBox 客户机添加项(控制面板 > 卸载程序)。
  2. 关闭虚拟机。
  3. 从旧版本的 VirtualBox Guest Additions 下载 ISO 文件这里. 适用VBoxGuestAdditions_6.1.48.iso
  4. (可选)将 ISO 文件保存在 下~/.config/VirtualBox/
  5. 在 VirtualBox 管理器中,选择 ISO 文件SATA 端口 1:[光驱] VBoxGuestAdditions_6.1.48.iso
  6. 启动虚拟机。
  7. 在“此电脑”下,双击CD 驱动器 (D:) VirtualBox 客户机添加项,然后VBoxWindowsAdditions.exe按照说明安装 VirtualBox Guest Additions v6.1.48。

笔记

VirtualBox Guest Additions v7 似乎都不起作用。那么,由于只有 VirtualBox Guest Additions v6 可以工作,因此最好也使用 VirtualBox v6 而不是 VirtualBox v7。

相关内容