
我們有一個程序,由於某些螢幕中的記憶體洩漏,當使用者退出時該程式無法乾淨地退出。問題是這會阻止正常的註銷過程 - 您選擇註銷,一些進程會消失,但用戶實際上並沒有註銷。
由於我無法修復該程序,我想我應該使用登出時運行的腳本來終止該進程。我已經驗證,如果我透過雙擊運行該腳本,該腳本會殺死該進程,並將該腳本新增至 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
也許?)。只有當您嘗試殺死的進程不是系統關鍵進程或會話關鍵進程(或您將殺死腳本綁定到系統關鍵進程的進程)時,這才是一個好主意,因為您不希望腳本被殺死該過程只是因為用戶關閉了托盤中的某些內容。我認為擁有登出腳本的想法非常好,但我建議您了解是否可以將開始功能表上的「登出」按鈕替換為啟動此腳本的按鈕。我知道我在電腦實驗室見過類似的東西。但是,如果您依賴使用者記住單擊桌面上的自訂「登出」按鈕,並且他們仍然可以正常註銷,那麼這種肌肉記憶只會讓每個人都感到沮喪。