我需要一个在 Windows 10 上执行(即运行,无论是由我还是 Windows 本身触发)时自动关闭的程序 - 该程序无法通过任何其他方式卸载或禁用。可以使用 CMD、Powershell 或任务计划程序通过批处理脚本来实现吗?请尽可能详细地解释,因为我不精通这些技术(虽然我精通技术,所以请随意使用“术语” - 只需提供如何使用这些技术的步骤)。我可以为需要关闭的确切程序提供更多上下文,但我认为这不是绝对必要的,而且这绝对可以应用于许多上下文(即,如果需要,使用“insertexe.exe”应用相同的脚本)。基本上,我想使这个程序无法打开,而不能/不必以任何其他方式卸载或停用。
答案1
,并将服务的组/本地策略设置为在停止时重新启动。例如这里的 SO 方法:
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
希望能帮助到你