如何在Windows 7中关闭之前执行命令(在它杀死所有正在运行的程序之前?)

时间:2012-06-21 16:00:32

标签: windows-7 automation virtualbox shutdown reboot

我有一个批处理文件,可以在Windows启动时启动VirtualBox虚拟机,并且我希望有人在重新启动或关闭计算机时自动保存虚拟机的状态。

我无法使用GPO,因为在Windows杀死其他所有内容后,它会发生一切。

那么有没有办法修改Windows如何处理这个问题,或者以某种方式拦截关机/重启信号?

3 个答案:

答案 0 :(得分:1)

我刚才找到了这个解决方案。它使用python,因此它不是最轻量级的解决方案,但它对我有用。

  
      
  • 下载vbox-shutdown.py某处有写权限(除非您指定不同的路径,否则会创建日志文件)。
  •   
  • 与VirtualBox具有相同架构的Python 2.7 - 如果你有64位系统,你可能需要64位Python(我已经使用过COM了)   api - 它现在不允许跨拱互操作)。这可能会改变   通过使用命令行API,如果有人真的想要这个。任何人都行   修复它 - 它只是一些Python代码。
  •   
  • 安装pywin32 - 与上面相同的架构/原因。
  •   
  • 安装vboxapi软件包。在c:\ Program Files \ Oracle \ VirtualBox \ sdk \ install \中运行python vboxapisetup.py安装就可以了   我。我想知道为什么他们有这个无用的pypi包没有   发行......
  •   
  • 现在运行shell:startup并将文件放在那里。
  •   

所有积分都转到ionelmc http://blog.ionelmc.ro/2014/01/04/virtualbox-vm-auto-shutdown/

答案 1 :(得分:0)

好的,我能想出最好的

以下python脚本将等待关闭,中止,调用脚本,然后重新启动关闭。将它添加到启动时开始。

编辑需要pywin32 python extension availible Here

1问题是它不会从开始菜单或电源按钮中止关机。只有软件停机。您可以将其停用为thisthis。如果您仍然希望能够手动关闭电脑,请添加一个批处理文件 NAMED ANYTHING但“SHUTDOWN”以及以下内容

shutdown -f -s

python脚本

import win32security
import win32api
import sys
import time
from ntsecuritycon import *
import os
import subprocess

Pre_ShutdownScript = "your Script"
Shutdown = True
# Get the process token
flags = TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY
htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags)

# Get the ID for the system shutdown privilege.
idd = win32security.LookupPrivilegeValue(None, SE_SHUTDOWN_NAME)

while Shutdown:
    try:
        win32security.AdjustTokenPrivileges(htoken, 0, [(idd, SE_PRIVILEGE_ENABLED)])
        win32api.AbortSystemShutdown(None)
        Shutdown = False        
    except:
        win32security.AdjustTokenPrivileges(htoken, 0, [(idd, 0)])
        time.sleep(1)

try:
    subprocess.call([Pre_ShutdownScript])
except:
    pass
os.system("shutdown -r -t 1")

答案 2 :(得分:0)

5moufl你说“我不能使用GPO,因为在Windows杀死其他所有内容之后它会发生一切”。您能详细说明您尝试的本地组策略更改吗?有错误吗?什么不适合你?当VM出现后续重启时发生了什么?

此处有关于将关闭操作定义为组策略的详细信息: http://en.kioskea.net/faq/3358-execute-a-script-a-startup-and-shutdown

  • 开始菜单>运行>输入gpedit.msc
  • 计算机配置>视窗
  • 设置>脚本(启动/关闭)
  • 双击“关闭”以显示“属性”窗口
  • 点击添加>浏览以添加关闭脚本
  • 关闭BAT脚本可能是: “C:\ Program Files \ Oracle \ VirtualBox \ VBoxManage.exe”controlvm MyVM savestate