我的客户需要在其 Windows Server 2008 (R1) 上运行虚拟化 Linux。我已设法使用 将 VirtualBox 设置为服务srvany
,但我看不到创建某种“停止脚本”的方法,以便当我停止注册的服务时虚拟机能够正确关闭。
我知道可能还有其他创建无头虚拟机的选项,但这不是重点。如何创建在停止注册服务(或系统重新启动)时执行的“停止脚本”?
或者也许还有其他方法可以启动“系统关机”脚本,以便虚拟机在关机时正确停止?
(对于那些可能感兴趣的人)
如何创建 VirtualBox 服务
- 设置虚拟机
- 安装“Windows Server 2003 Resource Kit Tools.exe”。
- 将“.VirtualBox”文件夹复制到“C:\Windows\System32\config\systemprofile\”,以便“系统”用户(运行服务)在那里拥有其 VirtualBox 机器。
警告:如果您的 VM 有快照,则需要将 VirtualBox.xml 路径更正为快照。 - 在以下命令的帮助下创建一个名为“UbuntuD”的空服务
srvany
:
sc create UbuntuD binPath= "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe" start= auto DisplayName= "Ubuntu Daemon"
- 指定服务启动命令。将这些键添加到注册表
[HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Services\UbuntuD\Parameters] 应用程序=“C:\Program Files\Sun\VirtualBox\VBoxHeadless.exe” AppParameters="--vrdp=off -s Ubuntu" AppDirectory="C:\Program Files\Sun\VirtualBox\"
- 我们的黑客服务没有“停止脚本”,因此我们在“本地策略”->计算机配置->Windows 设置->脚本(启动/关闭)中添加了一个关机脚本:
C:\Program Files\Sun\VirtualBox\vboxmanage
,参数:controlvm Ubuntu savestate
- 运行服务
答案1
“真正的”服务程序有代码来处理执行清理和关闭活动。您正在运行一个不打算作为服务运行的程序,当服务控制管理器 (SCM) 发出服务停止的信号时,它没有这样的代码来处理正常终止。
有人可以为 VirtualBox 编写一个不错的服务包装器,可以优雅地处理作为服务运行。这才是真正的解决方案。不幸的是,你不会想出一个可以完成你想要的“黑客”程序。当 SCM 发出服务停止信号时,SRVANY(以及我所知道的所有其他同类程序)没有任何能力执行用户指定的代码。
答案2
http://answers.yahoo.com/question/index?qid=20071011212557AAofTy6
创建一个 VBS 文件(即 VB 脚本)。打开记事本,并在其中输入以下代码:
'=====================================
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("H:\test.bat", 0)
set WshShell = Nothing
'=====================================
将上面代码中的“H:\test.bat”替换为你自己的BAT文件的完整路径,但是不要忘记BAT文件完整路径两边的双引号。
保存文件。将其命名为 HIDECMDWINDOW.VBS。扩展名必须是 VBS。
双击 VBS 文件来运行它。您的 BAT 文件应该运行而不显示命令窗口。
如果您的 BAT 文件接受参数,您也可以将参数传递给它 - 该脚本会更高级一些,但如果您需要它,请给我留言。
以上内容归功于原始发布者 Koushik Biswas。
发布在这里是因为这是我在搜索中出现次数最多的链接,而且我所链接的内容可能是大多数找到此内容的人所寻找的内容。