如何讓程式在 Windows 上執行時自動關閉

如何讓程式在 Windows 上執行時自動關閉

我需要一個程序,如果在 Windows 10 上執行(也稱為運行,無論是由我還是 Windows 本身觸發),該程序會自動關閉 - 該程序無法以任何其他方式卸載或停用。這可以透過使用 CMD、Powershell 或任務計劃程序的批次腳本來完成嗎?請盡可能詳細地解釋,因為我沒有這些技術的專業知識(儘管我精通技術,所以請隨意使用“行話” - 只需提供如何使用這些技術的步驟)。我可以為需要關閉的確切程式提供額外的上下文,但我認為這不是絕對需要的,而且這肯定可以應用於許多上下文(即,如果需要,可以使用“insertexe.exe”應用相同的腳本)。基本上我想讓這個程式無法打開,而不能/必須以任何其他方式卸載或停用。

答案1

只需嘗試將腳本設定為服務

,並將服務的群組/本機原則設定為在停止時重新啟動。例如這裡的 SO 方法:

如果 Windows 服務崩潰了,如何自動重新啟動它?

SC failure w3svc reset= 432000  actions= restart/30000/restart/60000/run/60000
SC failure w3svc command= "MyBatchFile.cmd"

再一次,正如[Frank Thomas],如果您需要停止任何本地管理員,那麼這需要編寫系統級程式碼,而不是腳本程式碼,以盡可能完整。管理員就是管理員,按照設計,他們可以在系統上做任何他們想做的事情。

答案2

看一下下面的批次腳本,您可以修改程式碼start %PROGRAM%taskkill /im %PROGRAM%在程式啟動時終止它。 https://github.com/lu-ko/utils-windows/blob/master/watchdog/watchdog.bat 您也可以將此bat腳本加入啟動中 https://www.windowscentral.com/how-create-and-run-batch-file-windows-10

例如,這個批次腳本將永遠循環檢查 notepad.exe,如果它正在運行則終止它。您可以將第四行程式碼替換為您的application.exe。

@echo off
set TIMEOUT_RUNNING=20
set TIMEOUT_STOPPED=5
set "PROCESS_NAME=notepad.exe"
goto loop


:loop
tasklist /FI "IMAGENAME eq %PROCESS_NAME%" /NH | find /I /N "%PROCESS_NAME%" >NUL

if "%ERRORLEVEL%"=="0" (

 echo [%DATE% %TIME%] Process %PROCESS_NAME% is running - Kill
 taskkill /im "%PROCESS_NAME%"
 timeout %TIMEOUT_RUNNING%

) else (

 echo [%DATE% %TIME%] Process %PROCESS_NAME% is not running
 timeout %TIMEOUT_STOPPED%
)
goto loop

希望能幫助你

相關內容