我们有一个程序,由于某些屏幕内存泄漏,用户退出时程序无法正常退出。问题是,这会阻止正常的注销过程 - 您选择注销,一些进程会消失,但用户实际上并没有注销。
由于我无法修复该程序,我想使用在注销时运行的脚本来终止该进程。我已验证如果通过双击运行该脚本,它会终止该进程,并且已将脚本添加到我的计算机上的 gpedit 中的 Windows 设置 -> 脚本 -> 注销。
不幸的是,注销脚本似乎要等到所有进程都终止后才会运行,所以它永远不会运行。
有没有办法让注销脚本在流程的早期运行?或者有更好的方法可以解决这个问题?
答案1
您是否尝试过将 HKEY_CURRENT_USER\Control Panel\Desktop AutoEndTasks 下的注册表设置设置为 1?如果可行,则您不需要该脚本。
答案2
您可以使用以下程序注销http://www.karenware.com/powertools/ptstopper.asp在注销之前运行脚本。
答案3
将其添加到脚本末尾
Set strComputer = "."
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//" & strComputer & "/root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
for each OpSys in OpSysSet
OpSys.Win32Shutdown 0
next
WScript.Quit(0)
让他们使用这个脚本而不是正常注销。
我目前不确定如何让它在进程退出之前运行脚本,但如果这不起作用,可以继续查看。此外,我没有机会测试,但这应该是命令的正确语法。如果需要一些调整,请告诉我。
答案4
我认为,有点搞笑的是,您遇到的问题是用户在注销时从未完全注销,因此您编写了一个脚本,该脚本说“注销时终止此进程”,但该脚本无法运行,因为用户从未注销。您希望脚本在用户点击“注销”时启动,而不是在用户完成注销时启动。
我不太熟悉 VBScript 甚至注销背后的 Windows API,但我建议执行以下操作之一:
找出当用户选择“注销”时是否会引发单独的事件/触发器,并在此时触发您的脚本。如果说起来容易做起来难,我很抱歉,但这似乎是了解您真正想法的最明显方法。
查明是否有一个进程在用户选择注销后肯定会退出(
explorer.exe
可能吗?)。这只有在您尝试终止的进程不是系统关键进程或会话关键进程时才是一个好主意(或者,如果您将终止脚本绑定到的进程是系统关键进程),因为您不希望脚本仅仅因为用户关闭了托盘中的某个程序就终止该进程。我认为使用注销脚本的想法非常好,但我建议你看看是否可以用启动此脚本的按钮替换开始菜单上的“注销”按钮。我知道我在计算机实验室见过类似的东西。但如果你依靠用户记住单击桌面上的自定义“注销”按钮,并且他们仍然可以正常注销,那么这种肌肉记忆只会让每个人都感到沮丧。