Windows:使用无头应用程序(VirtualBox)创build服务。 停止/closures脚本?

我的客户需要在他的Windows Server 2008(R1)上运行虚拟化的Linux。 我已经成功地将VirtualBox设置为srvany服务,但是我看不到创build一种“停止脚本”的方法,所以当我停止注册的服务时,虚拟机会正确closures电源。

我知道可能还有其他创build无头虚拟机的选项,但这不是重点。 我怎样才能创build一个停止脚本,当我停止注册的服务(或系统重新启动)时执行?

或者,也许还有一些其他的方法来启动“系统关机”脚本,以便在关机时VM正常停止?


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

我如何创build一个VirtualBox服务

  1. 设置虚拟机
  2. 安装“Windows Server 2003资源工具包Tools.exe”。
  3. 将“VirtualBox”文件夹复制到“C:\ Windows \ System32 \ config \ systemprofile \”,这样'system'用户(运行服务)就有VirtualBox机器。
    警告:如果您的虚拟机有任何虚拟机,则需要将VirtualBox.xmlpath更正为快照。
  4. 在srvany的帮助下创build一个名为“UbuntuD”的空服务:
    sc create UbuntuD binPath= "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe" start= auto DisplayName= "Ubuntu Daemon"
  5. 指定服务启动命令。 将这些键添加到registry
      [HKEY \ _LOCAL \ _MACHINE \系统\ CurrentControlSet \服务\ UbuntuD \参数]
     Application =“C:\ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe”
     AppParameters =“ -  vrdp = off -s Ubuntu”
     AppDirectory =“C:\ Program Files \ Sun \ VirtualBox \” 
  6. 我们的hacky服务没有“停止脚本”,所以我们在“本地策略” – >计算机configuration – > Windows设置 – >脚本(启动/closures)中添加一个closures脚本:
    C:\Program Files\Sun\VirtualBox\vboxmanage ,params: controlvm Ubuntu savestate
  7. 运行服务

“真正的”服务程序有处理清理和closures活动的代码。 您运行的程序不是作为服务运行的,并且在服务控制pipe理器(SCM)发出信号表明服务正在停止时,它没有这样的代码来处理正常终止。

有人可以写一个很好的服务包装的VirtualBox,可以优雅地处理作为服务运行。 这是真正的解决scheme。 不幸的是,你不会想出一个“黑客”,将做你正在寻找的东西。 SRVANY(以及我知道的同types的其他所有程序)在SCM指示服务正在停止时没有任何执行用户指定代码的function。

http://answers.yahoo.com/question/index?qid=20071011212557AAofTy6

创build一个VBS文件(即VB脚本)。 打开记事本,并在其中键入以下代码:

 '===================================== Set WshShell = WScript.CreateObject("WScript.Shell") obj = WshShell.Run("H:\test.bat", 0) set WshShell = Nothing '===================================== 

将上面代码中的“H:\ test.bat”replace为你自己BAT文件的完整path,但不要忘记BAT文件完整path的双引号。

保存文件。 给它一个像HIDECMDWINDOW.VBS的名字。 扩展名必须是VBS。

双击VBS文件运行它。 您的BAT文件应该运行而不显示命令窗口。

如果你的BAT文件带有参数,你也可以传递参数 – 脚本会稍微高一点,但是如果你需要的话,给我留言。

上面的信用去Koushik比斯瓦斯作为原始的海报。

在这里发布,因为这是我在search中出现最多的链接,我链接到的大多数人可能是大多数人find这个。