如何让程序在 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

希望能帮助到你

相关内容