我有一个 Windows 7 机器,其中包含多个在启动时启动的 VMWare Player 机器。我使用 WMWare VIX 和一个批处理文件来关闭虚拟机,如下所示:
"C:\path\to\VMWare VIX\vmrun.exe" -T player stop "C:\path\to\machine.vmx" soft
我想要完成的是在主机关闭时运行这些命令,这样我就不需要单独关闭每个 VM。部署后,可能会通过短按 ACPI 电源按钮而不是从“开始”菜单开始关闭。我尝试过的方法不起作用(至少不够好):
组策略 - 最明显的方法,但在 Windows 7 中,“异步”运行关闭脚本的选项消失了。
结果是 Windows首先告诉所有打开的窗口关闭,VM 响应它们正在使用,然后您会看到“强制关闭”对话框。只有在关闭 VMWare Player 和其他所有内容后,脚本才会运行,但没有任何用处。
你会认为这可以改变,但我想我记得看到一些官方的 MS 注释,上面写着“不,抱歉”。虽然找不到链接。使用一个批处理文件来关闭所有虚拟机,然后将主机作为桌面快捷方式关闭,而不是通常的关闭按钮。- 有效,这就是我现在在开发时使用的东西。
但是使用 ACPI 电源按钮会启动正常关机,其结果与之前相同,而且如果每天打开和关闭机器的最终用户不需要使用显示器和鼠标会更好。
所以我目前正在搜索的是一种修改按下物理电源按钮时调用的操作的方法。Windows 允许您在睡眠、休眠、重新启动等一些不同的操作之间进行选择,但是您可以将其更改为“运行此 .bat”吗?或者可能完全改变关闭命令的行为?以编程方式拦截关机消息,中止关机,运行批处理文件,重新启动关机。已经有一些关于拦截关机的讨论,例如这里、这里和这里,但是除了 Ruby 或 Java 之外,我仍然对所有语言都过于熟悉,无法真正理解在这种情况下是否以及如何做到这一点。如果有人可以阐明如何实际完成这项工作(不会卡在“强制关闭”屏幕上),那么我很想尝试您提供的任何语言。