Windows:通过无头应用程序 (VirtualBox) 创建服务。停止/关闭脚本?

Windows:通过无头应用程序 (VirtualBox) 创建服务。停止/关闭脚本?

我的客户需要在其 Windows Server 2008 (R1) 上运行虚拟化 Linux。我已设法使用 将 VirtualBox 设置为服务srvany,但我看不到创建某种“停止脚本”的方法,以便当我停止注册的服务时虚拟机能够正确关闭。

我知道可能还有其他创建无头虚拟机的选项,但这不是重点。如何创建在停止注册服务(或系统重新启动)时执行的“停止脚本”?

或者也许还有其他方法可以启动“系统关机”脚本,以便虚拟机在关机时正确停止?


(对于那些可能感兴趣的人)

如何创建 VirtualBox 服务

  1. 设置虚拟机
  2. 安装“Windows Server 2003 Resource Kit Tools.exe”。
  3. 将“.VirtualBox”文件夹复制到“C:\Windows\System32\config\systemprofile\”,以便“系统”用户(运行服务)在那里拥有其 VirtualBox 机器。
    警告:如果您的 VM 有快照,则需要将 VirtualBox.xml 路径更正为快照。
  4. 在以下命令的帮助下创建一个名为“UbuntuD”的空服务srvany
    sc create UbuntuD binPath= "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe" start= auto DisplayName= "Ubuntu Daemon"
  5. 指定服务启动命令。将这些键添加到注册表
    [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\"
  6. 我们的黑客服务没有“停止脚本”,因此我们在“本地策略”->计算机配置->Windows 设置->脚本(启动/关闭)中添加了一个关机脚本:
    C:\Program Files\Sun\VirtualBox\vboxmanage,参数: controlvm Ubuntu savestate
  7. 运行服务

答案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。

发布在这里是因为这是我在搜索中出现次数最多的链接,而且我所链接的内容可能是大多数找到此内容的人所寻找的内容。

相关内容