5

У меня есть несколько запланированных задач, каждая из которых выполняет (разные) командный файл. Каждый пакетный файл вызывает одну и ту же программу, с отдельными аргументами командной строки. Если я остановлю задачу во время ее выполнения, программа в командном файле все еще будет работать. (Пакетный файл является однострочным, который просто выполняет программу.)

Как заставить программу, запущенную из командного файла, принудительно завершить работу, когда я остановил задачу, которая вызывает командный файл?

В качестве обходного пути я ищу задачу в запущенных процессах и уничтожаю ее по идентификатору процесса. Я хотел бы более чистое решение, которое управляется из планировщика заданий.

1 ответ1

0

Это пример, чтобы убить некоторый процесс, такой как "Taskhost.exe" "SSScheduler.exe" "taskeng.exe" чтобы вы могли добавить или удалить какой-либо процесс, который нужно убить в этом пакете; просто вы должны знать название процесса, который будет убит.

@echo off
cls & color 0A
Mode con cols=60 lines=6
Title ProcessKiller by Hackoo 2016
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
REM  --> Check for permissions
Reg query "HKU\S-1-5-19\Environment">nul 2>&1
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
Echo.
ECHO            **************************************
ECHO             Running Admin shell... Please wait...
ECHO            **************************************

    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
set process="Taskhost.exe" "SSScheduler.exe" "taskeng.exe"
set Tmp=Tmp.txt
set LogFile=ProcessKillerLog.txt
If Exist %Tmp% Del %Tmp%
If Exist %LogFile% Del %LogFile%
For %%a in (%process%) Do Call :KillMyProcess %%a %Tmp%
Cmd /U /C Type %Tmp% > %LogFile%
If Exist %Tmp% Del %Tmp%
Start "" %LogFile%
Exit /b

:KillMyProcess
Cls 
echo.
ECHO             **************************************
Echo               Trying to kill "%~1"
ECHO             **************************************                       
(
Echo The Process :  "%~1"  
Taskkill /IM "%~1" /F /T
Echo =======================
)>>%2 2>&1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .