Parar uma tarefa agendada com uma ação de arquivo em lotes não interrompe o programa em execução no arquivo em lotes

6

Eu tenho várias tarefas agendadas que cada executar um arquivo em lotes (diferente). Cada arquivo em lote chama o mesmo programa, com argumentos de linha de comando separados. Se eu parar uma tarefa enquanto ela estiver em execução, o programa no arquivo em lotes ainda será executado. (O arquivo de lote é um one-liner que simplesmente executa o programa.)

Como posso forçar o programa iniciado a partir de um arquivo em lotes para forçar a sair quando eu parar a tarefa que chama o arquivo em lotes?

Como uma solução, procuro a tarefa nos processos em execução e mato-a pelo id do processo. Eu gostaria de uma solução mais limpa que é gerenciada a partir do Agendador de Tarefas.

Christopher Stevenson
fonte
Você sabia o nome do processo iniciado pelo seu lote? ou edite sua pergunta e poste seu código de lote. Para listar todas as tarefas agendadas, digite esta linha de comandoSchtasks /query /fo LIST
Hackoo

Respostas:

0

Este é um exemplo para matar algum processo, "Taskhost.exe" "SSScheduler.exe" "taskeng.exe"assim você pode adicionar ou remover algum processo para ser morto neste lote; só você deve saber o nome do processo a ser morto.

@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
Hackoo
fonte
2
Eu entendo como matar um processo. Estou mais interessado em como matar um processo quando a tarefa é interrompida no Agendador de Tarefas.
Christopher Stevenson