我有一个批处理文件,可以在Windows启动时启动VirtualBox虚拟机,并且我希望有人在重新启动或关闭计算机时自动保存虚拟机的状态。
我无法使用GPO,因为在Windows杀死其他所有内容后,它会发生一切。
那么有没有办法修改Windows如何处理这个问题,或者以某种方式拦截关机/重启信号?
答案 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问题是它不会从开始菜单或电源按钮中止关机。只有软件停机。您可以将其停用为this和this。如果您仍然希望能够手动关闭电脑,请添加一个批处理文件 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: