
Мне нужна программа, которая автоматически закрывается, если она выполняется (т. е. запускается, независимо от того, запущена ли она мной или самой Windows) в Windows 10 — программу нельзя удалить или отключить каким-либо другим способом. Можно ли это сделать с помощью пакетного скрипта с использованием 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"
Опять же, как [Фрэнк Томас], если вам нужно остановить любого локального администратора, то это требует написания системного кода, а не скриптового кода, чтобы быть максимально полным. Администраторы есть администраторы и по замыслу могут делать все, что захотят, в своей системе.
решение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
Надеюсь, поможет