Wieso funktioniert taskill in einer Batch nicht?

Saugbär

Ensign
Registriert
Juli 2022
Beiträge
137
Ich möchte mit einer Batchdatei Afterburner und RTSS starten oder schließen.
RTSS sorgt durch einen Bug für erhöhten Energieverbrauch.
Windows 10 Enterprise
Unwinder ( Der entwickler von MSI Afterburner und RTSS) wörtlich: No support vor Laptops:heul:
Habe ein Problem mit Taskkill
Das Verschachteln mit den doofen Klammern hab ich probiert, war nur am verzweifen und habs aufgegeben
Beispiel:
tasklist |find /i "%MSIAfterburner.exe%" >nul
if %errorlevel% == 0 (
echo Das Programm "%MSIAfterburner.exe%" leauft gerade!
) else (
echo Das Programm "%MSIAfterburner.exe%" leauft gerade nicht!
)
tasklist |find /i "%RivaTuner Statistics Server\RTSS.exe%" >nul
if %errorlevel% == 0 (
echo Das Programm "%RivaTuner Statistics Server\RTSS.exe%" leauft gerade!
) else (
echo Das Programm "%RivaTuner Statistics Server\RTSS.exe%" leauft gerade nicht!
funktioniert einfach nicht
fragt nur den Status ab ....und gibt den Status aus
Wie bekommt man das richtige errorlevel?

:heul:


Mit "notepad" funktioniert meine Batch komischerweise
Notepad startet und schließt

Es reicht im Prinzip der Befehl:
taskkill /pid 9444 /pid 11864 /t
Unbedingt die Pid Kontrolliern !!!!!!!!!!!!!!
Wer weiß, was ansonsten abgeschoßen wird
im cmd.


Bekomme die Fehlermeldung:
Ursache: Zugriff verweigert
FEHLER: Der Prozess mit PID 11864 (untergeordnetem Prozess von PID 9592) konnte nicht beendet werden.
Ursache: Mindestens ein untergeordneter Prozess wird noch ausgeführt.

PID 9592 ist jedoch der Explorer:evillol:

Habe schon tagelang gebastelt,
Viel gelesen, einige Ideen geklaut.
https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-kommandos?id=tasklist
zum Bleistift.....
Er hat eine ordendliche Sammlung an Batch Demos
zum Schluß spring der Path nach C:\Program Files (x86)\RivaTuner Statistics Server\
man muß wieder zurück in den Testordner
cd C:\testordner\ sollte helfen
@echo off
set Programm=explorer

QPROCESS "MSIAfterburner.exe">nul
Rem Taskinfo hat nicht funktioniert
if %errorlevel% EQU 0 goto an
if %errorlevel% EQU 1 goto aus
:an
taskkill /pid 9444 /t /pid 11864 /t

rem "Username eq administrator"
rem pid 2104 (Afterburner) pid kommt hier pid 11864 (RTSS) Im Taskmanager unter Details zu sehen
rem Unbedingt kontrollieren !!!!!
echo Tuning ist an! (war zu kontrollzwecken, ob der goto Befehl funktionert)
goto ende
:aus
cd "C:\Program Files (x86)\RivaTuner Statistics Server\"
start RTSS.exe


cd "C:\Program Files (x86)\MSI Afterburner\"
start MSIAfterburner.exe


echo off

rem TIMEOUT /T 2 /NOBREAK
rem EXIT /B




rem waren verschiedene Versuche
rem cmd /c start "" "C:\Program Files (x86)\RivaTuner Statistics Server\RTSS.exe"



rem Call C:\Program Files (x86)\RivaTuner Statistics Server\RTSS.exe
 
Zuletzt bearbeitet:
Saugbär schrieb:
Ursache: Zugriff verweigert
dein batch braucht erhöhte rechte.

du kannst vorne weg was einbauen, was das abfragt.
und bei bedarf einfordert.
vulgo: wenn nicht mit erhöhten rechten gestartet, holt es sich die per UAC abfrage.

das da z.b.:

Code:
@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    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
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
 
  • Gefällt mir
Reaktionen: DJMadMax
Welchem Zweck sollen die %-Zeichen im find dienen. Die werden höchstens als Variable gewertet, die nicht definiert ist.

Wenn ich ohne teste gibt es das entsprechende Errorlevel aus - wäre bei mir 1, da nicht im Einsatz.
 
error.png

So stürzt der cmd ab.
Ich frage mal doof: Geht das auch über die Powershell?
Die hab ich bisher immer nur zum diskmanagement genutzt


Beim starten poppt jetzt das Fenster auf.
Beim Versuch, die Bat zum killen zu starten, wird stattdessen jetzt versucht, Afterburner erneut zu starten
geändert hab ich im unteren Abschnitt jedoch nichts
:heul:
error 2.png
 
Zuletzt bearbeitet:
nun, das ist sie, die UAC abfrage

benutzerkontensteuerung=user account control=UAC

warum die fehlermeldung mit "nicht gefunden" kommt: keine ahnung.
weil das "getadmin.vbs" wird im temp erstellt, und nach benutzung falls keine adminrechte (UAC) wieder gelöscht

copy/paste ok?
 
Zuletzt bearbeitet:
Und wie immer, wenn ihr jemand was von Enterprise schreibt. Wende dich an die IT Abteilung deiner Firma
 
  • Gefällt mir
Reaktionen: kartoffelpü
mae1cum77 schrieb:
Laß die Erhöhung erstmal weg und schau das der Code läuft.

Starte die CMD/BAT per Rechtsklick als Admin. Läuft das?
zum Testen hab ich es immer vom CMD ausprobiert.
War garnicht auf die Idee gekommen.......
Habs jetzt mit Admin ausprobiert
Resultat Starten Ja beim Schlie0en versucht wird erneut versucht fterburner zu starten.
Ergänzung ()

yxcvb schrieb:
Und wie immer, wenn ihr jemand was von Enterprise schreibt. Wende dich an die IT Abteilung deiner Firma
Ich bin die Amateur IT
Kleinbetrieb Halt. Mein Chef meinte nur : Enterprise, gut zum Rechner verwalten, also gekauft.
IT würde mir einen Husten von wegen Privatvergnügen.
Die Paar Rechner bei uns hab ich ja im Griff mit nem Pi als highTech Backupserver
:o
 
Zuletzt bearbeitet:
nuja, aber es sollte klar sein, daß das jedenfalls erhöhte rechte braucht, ob jetzt mit starten als admin oder mit der uac abfrage kommt sich aufs gleiche raus.

sogar ein simples "chkdsk c:", ohne parameter, nur lesend/informativ braucht sowas, hat es das ned: erraten "zugriff verweigert"
 
Saugbär schrieb:
Resultat Starten Ja beim Schlie0en versucht wird erneut versucht fterburner zu starten.
Kein Wunder, das soll via goto zu 'ende' springen, das nicht existiert, dann startet es die EXE im nächsten Teil ;).

Sollte so aussehen:
Code:
@echo off
set Programm=explorer

QPROCESS "MSIAfterburner.exe">nul
Rem Taskinfo hat nicht funktioniert
if %errorlevel% EQU 0 goto an
if %errorlevel% EQU 1 goto aus
:an
taskkill /pid 9444 /t /pid 11864 /t

rem "Username eq administrator"
rem pid 2104 (Afterburner) pid kommt hier pid 11864 (RTSS) Im Taskmanager unter Details zu sehen
rem Unbedingt kontrollieren !!!!!
echo Tuning ist an! (war zu kontrollzwecken, ob der goto Befehl funktionert)
goto ende
:aus
cd "C:\Program Files (x86)\RivaTuner Statistics Server\"
start RTSS.exe


cd "C:\Program Files (x86)\MSI Afterburner\"
start MSIAfterburner.exe

:ende
exit

Für die Rechte-Erhöhung nutze ich folgendes, direkt nach @echo off:
Code:
    :: set arguments to jump to :admin label and pass any other command line parameters to self-elevate via powershell
    set "args=set __JUMP__=admin &set ?=y&call "%~f0" %*" &call set "args=%%args:"=\""%%"
    ::AveYo: self-elevate passing args and preventing loop
    reg query HKU\S-1-5-20 >nul 2>nul || if "%?%" neq "y" (powershell -c "start cmd -ArgumentList '/c %args%' -verb runas" &exit)
    :: should be elevated here
 
  • Gefällt mir
Reaktionen: redjack1000 und whats4
Chk mach ich immer über die Powershell noch nie Probleme damit gehabt.
Ist halt das erste mal, das ich eine etwas schwierigere batch mache.
Deswegen hab ich ja gefragt :Ich frage mal doof: Geht das auch über die Powershell?
 
@echo off

:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
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
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------


taskkill /pid 9444 /pid 11864 /t
Getestet nur mit dem Befehl Taskkill
cmd Stützt nach eingabeTaste ab
 
:: set arguments to jump to :admin label and pass any other command line parameters to self-elevate via powershell
set "args=set JUMP=admin &set ?=y&call "%~f0" %*" &call set "args=%%args:"=\""%%"
::AveYo: self-elevate passing args and preventing loop
reg query HKU\S-1-5-20 >nul 2>nul || if "%?%" neq "y" (powershell -c "start cmd -ArgumentList '/c %args%' -verb runas" &exit)
:: should be elevated here

taskkill /pid 9444 /t /pid 11864 /t
Die Adminrechte wurden abgefragt, ist wohl nicht das problem
taskkill wird anscheinend garnicht ausgeführt
 
Code:
@echo off
taskkill /F /IM MSIAfterburner.exe
taskkill /F /IM RTSS.exe
timeout 1
cd\
c:
cd\
cd Hier-RTSS-Pfad-angeben
start RTSS.exe
cd\
c:
cd\
cd Hier-MSI-Afterburner-Pfad-angeben
start MSIAfterburner.exe
exit

Das beendet Afterburner und RTSS und startet es dann neu.
Und bei der Batch Datei machst du bei EIgenschaften nen Häkchen das die mit admin rechten ausgeführt wird.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Saugbär
Das mit dem partiellen Testen richtig machen :).

Geht das:
Code:
@echo off

set "args=set __JUMP__=admin &set ?=y&call "%~f0" %*" &call set "args=%%args:"=\""%%"
reg query HKU\S-1-5-20 >nul 2>nul || if "%?%" neq "y" (powershell -c "start cmd -ArgumentList '/c %args%' -verb runas" &exit)

set Programm=explorer

QPROCESS "MSIAfterburner.exe">nul
Rem Taskinfo hat nicht funktioniert
if %errorlevel% EQU 0 goto an
if %errorlevel% EQU 1 goto aus
:an
taskkill /pid 9444 /t /pid 11864 /t

rem "Username eq administrator"
rem pid 2104 (Afterburner) pid kommt hier pid 11864 (RTSS) Im Taskmanager unter Details zu sehen
rem Unbedingt kontrollieren !!!!!
echo Tuning ist an! (war zu kontrollzwecken, ob der goto Befehl funktionert)
goto ende
:aus
cd "C:\Program Files (x86)\RivaTuner Statistics Server\"
start RTSS.exe


cd "C:\Program Files (x86)\MSI Afterburner\"
start MSIAfterburner.exe
: ende
exit
 
Zuletzt bearbeitet:
D0m1n4t0r schrieb:
Code:
@echo off
taskkill /F /IM MSIAfterburner.exe
taskkill /F /IM RTSS.exe
timeout 1
cd\
c:
cd\
cd Hier-RTSS-Pfad-angeben
start RTSS.exe
cd\
c:
cd\
cd Hier-MSI-Afterburner-Pfad-angeben
start MSIAfterburner.exe
exit

Das beendet Afterburner und RTSS und startet es dann neu.
Hurra , ich kann es dann ja schön machen
So funktioniert es.
Mit dem Starten hatte ich ja keine Probleme
Deinen Tip hatte ich mehrfach in verschiedesten Versionen ausprobiert, immer ohne erfolg
Der richtige Mix macht es.
Jetzt kann ich es auch nochmal mit den PID ausprobieren
Vielen Dank.:heilig::heilig::heilig::heilig:
So sieht meien Version nur mit kill aus
Den Rest mach ich Später
Wollte erst testen, ob der killbefehl überhaupt ausgeführt wird.
Startbefehl ist ja auch lustig
Start "C:\Program Files (x86)\RivaTuner Statistics Server\" RTSS.exe
öffnet ein Explorerfenster im Ordner C:\Program Files (x86)\RivaTuner Statistics Server\
Will ich das so? neeeeee... aber Microsoft schon :evillol:
@echo off

:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
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
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------


taskkill /F /IM MSIAfterburner.exe
taskkill /F /IM RTSS.exe
Ergänzung ()

Hier die erste (Edit: Zweite) Version mit funktionierendem On /Off(Beta)
Mein Ansatz war schon richtig.
Bin aber noch am lernen.
Exit ist zu testzwecken nicht angeschaltet
Mit Notepad hatte es ja auch geklappt und weil ich nirgens mehr hinweise gefunden habe,
mußte ich mal fragen.
:: set arguments to jump to :admin label and pass any other command line parameters to self-elevate via powershell
set "args=set JUMP=admin &set ?=y&call "%~f0" %*" &call set "args=%%args:"=\""%%"
::AveYo: self-elevate passing args and preventing loop
reg query HKU\S-1-5-20 >nul 2>nul || if "%?%" neq "y" (powershell -c "start cmd -ArgumentList '/c %args%' -verb runas" &pause)
:: should be elevated here


QPROCESS "MSIAfterburner.exe">nul
if %errorlevel% EQU 0 goto an
if %errorlevel% EQU 1 goto aus
:an
taskkill /F /IM MSIAfterburner.exe
taskkill /F /IM RTSS.exe

goto ende
:aus
cd "C:\Program Files (x86)\RivaTuner Statistics Server\"
start RTSS.exe

cd "C:\Program Files (x86)\MSI Afterburner\"
start MSIAfterburner.exe

echo off
:Ende
rem TIMEOUT /T 2 /NOBREAK
rem EXIT /B
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: redjack1000 und DJMadMax
Da das hier im Thread bisher noch nicht explizit erwähnt wird, möchte ich nur (für spätere Leser) klarstellen, dass PIDs sich bei jedem Programmaufruf ändern und dass der Codeschnipsel
Code:
taskkill /pid 9444 /t /pid 11864 /t
nur als Beispiel dient. Eine PID direkt in eine Batchdatei zu schreiben ist quasi immer eine schlechte Idee. Beim Einsatz sollte die jeweils aktuelle gesuchte PID zur Laufzeit ermittelt werden. Zur Ermittelung zieht man bspw. den Namen des Prozesses heran.

Und @Saugbär
Füge doch bitte hier im Forum Code in [code]...[/code]-Tags ein, nicht in Zitaten.
 
  • Gefällt mir
Reaktionen: Redundanz
Hab den Punkt Code gefunden, war versteckt unter weitere...... Beim Nächsten mal weiß ich es;)

Eigendlich hatte ich ja sowas vor
Ganz einfach gestrickt
Man kann das jederzeit einfach erweitern
das mit den globales ist ja eigendlich eine schöne sache, wenn sie funktioniert
Macro Recorder hatte ich zwischendurch auch mal ausprobiert:freak:


Code:
echo off
set pl=
set pl=%pl% MSIAfterburner.exe
set pl=%pl% RTSS.exe
rem set pl=%pl% Notepad.exe

tasklist |findstr /i %%a >nul
if %errorlevel% == 0 (

start "C:\Program Files (x86)\RivaTuner Statistics Server\RTSS.exe"
start "C:\Program Files (x86)\MSI Afterburner\MSIAfterburner.exe"
rem start Notepad.exe

) else (

taskkill  /im RTSS.exe /t /f
taskkill  /im MSIAfterburner.exe /t /f
rem Taskkill /im Notepad .exe
)
 
Zurück
Oben