deathshadow
Goto Top

Wie prüfen ob programm des gleichen namens aus unterschiedlichen ordnern gestartet ist

ich habe ein für mich großes problem und zwar habe ich mir eine batch datei geschrieben um zu prüfen ob ein brogramm gestartet ist oder nicht,
fals nicht wird das programm gestartet nun mein problem ...

ich muss dieses programm aus 2 unterschiedlichen ordnern gleichzeitig starten ...
ich prüfe es mit :

tasklist | findstr /i "<hier name>.exe" >>nul

nun der haken ... die beiden programme haben den gleichen namen und können nicht umbenannt werden.

ergo sagt er wenn brogramm ordner1/name.exe gestartet ist bei der brüfung ob ordner2/name.exe gestartet ist logischerweise auch ja ... :S

wie kann ich das realisieren das er den unterschied erkennt ...

Content-ID: 131915

Url: https://administrator.de/contentid/131915

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

rubberman
rubberman 17.12.2009 um 20:55:06 Uhr
Goto Top
Hallo DeathShadow,

mir fällt da nur ein eingebundenes VBScript ein:
@echo off &setlocal
>"%temp%\proc.vbs" echo Set objInstances = GetObject("winmgmts://./root\cimv2").InstancesOf("Win32_Process", 48)  
>>"%temp%\proc.vbs" echo On Error Resume Next  
>>"%temp%\proc.vbs" echo For Each objInstance in objInstances  
>>"%temp%\proc.vbs" echo With objInstance  
>>"%temp%\proc.vbs" echo WScript.Echo .Caption ^& ":" ^& .ExecutablePath  
>>"%temp%\proc.vbs" echo End With  
>>"%temp%\proc.vbs" echo On Error Goto 0  
>>"%temp%\proc.vbs" echo Next  

cscript //nologo "%temp%\proc.vbs"|findstr /b /i /c:"irgendeine.exe"  

del "%temp%\proc.vbs"  
pause

Zeile 11 lässt sich leicht in eine FOR Schleife mit Doppelpunkt als Delimiter einbinden.

Gruß
rubberman

PS: Etwas "Netikette" tut Not.
DeathShadow
DeathShadow 17.12.2009 um 21:05:00 Uhr
Goto Top
ok ich danke dir vielmals für deine schnelle hilfe ...
aber ich habe vergessen zu sagen das ich dies zum ersten mal machen ^^ ...

und ich verstehe jetzt nur bahnhof ... ich poste mal meine komplete .bat wäre mir sehr hilfreich wenn du mir die gelich so umschreibn könntest das es funktionier XD ... pls
@echo off
set waittime=10


start server_start.bat
ECHO STARTE SERVER

start /W Wait %waittime%

:top

tasklist | findstr /c:"C:\0.3.5\CWRealm.exe" >>nul  

if not "%errorlevel%"=="0" start CWRealm.exe & ECHO logon-server crashed ... starte neu  
if "%errorlevel%"=="0" ECHO logon-server ist online  


start /W Wait 2


tasklist | findstr /c:"C:\0.3.5\CWCore.exe" >>nul  

if not "%errorlevel%"=="0" start CWRealm.exe & ECHO main-server crashed ... starte neu  
if "%errorlevel%"=="0" ECHO main-server ist online  



start /W Wait 2


tasklist | findstr /c:"C:\0.3.5\test-realm\CWCore.exe" >>nul  

if not "%errorlevel%"=="0" start test-realm\CWCore.exe & ECHO test-server crashed ... starte neu  
if "%errorlevel%"=="0" ECHO test-server ist online  


echo ____________________________________________________
echo pruefe in %waittime%sec erneut
echo ____________________________________________________
start /W Wait %waittime%

goto top

dies ist mein bis jetzt letzter versuch ... hat wie zu erwarten auch nicht funktionier ... die bat startet die exen immer und immer wieder ...

danke im voraus
Snowman25
Snowman25 17.12.2009 um 21:07:10 Uhr
Goto Top
Hallo DeathShadow,

mir fällt der der Processexplorer von SysInternals ein...
Viel Spaß damit face-big-smile

greetz Snow
Biber
Biber 17.12.2009 um 21:14:29 Uhr
Goto Top
Moin rubberman,

Zeile 11 lässt sich leicht in eine FOR Schleife mit Doppelpunkt als Delimiter einbinden.
...oder aber du änderst gleich in der namenlosen .cmd-Datei (ich hab sie bei mir "rubbermansPslist.cmd" genannt die Zeile 11 in
....
cscript //nologo "%temp%\proc.vbs"|findstr /b /i /c:"%~1"  
...

Bewirkt:
>e:\schnipsel\rubbermansPslist.cmd java.exe
java.exe:C:\Programme\Java\jre6\bin\java.exe
java.exe:C:\Programme\Java\jre6\bin\java.exe
Drücken Sie eine beliebige Taste . . .
[okay, sind zwei instanzen aus dem gleichen Pfad in dem Beispiel...]

Grüße
Biber
DeathShadow
DeathShadow 17.12.2009 um 22:03:43 Uhr
Goto Top
ok ok nochmals vielen dank für eure antworten nur leider hilft mir persöhnlich das nicht weiter ...
ist von euch villeicht einer so nett und schreibt mein script um (müste ja ersichtlich sein was es bewirken soll)

da ich dieses script dringend brauche (am besten schon gestern) und ich im moment leider nicht die zeit habe mich in die materie ein zu arbeiten (was aber bestimmt noch kommen wird )

MFG

Der Death
rubberman
rubberman 17.12.2009 um 22:04:21 Uhr
Goto Top
Hallo Zusammen.

@Snowman25
Dein Link ist bei mir irgendwie down ?! Weiß also nicht wie man das in ein Batchfile einbinden könnte.
<edit>Link ist doch nicht down. So wie ich das sehe ist das aber ausschließlich eine GUI Anwendung.</edit>

@Biber
als "Stand-Allone" hast Du natürlich Recht. Hatte allerdings im Sinn, diese Zeile ähnlich TASKLIST direkt im Batch zu verwursten.

@DeathShadow
Wenn ich das ganze richtig verstehe, ungefähr so (UNGETESTET):

@echo off &setlocal
set waittime=10

start server_start.bat
ECHO STARTE SERVER

start /W Wait %waittime%

:top

>"%temp%\proc.vbs" echo Set objInstances = GetObject("winmgmts://./root\cimv2").InstancesOf("Win32_Process", 48)  
>>"%temp%\proc.vbs" echo On Error Resume Next  
>>"%temp%\proc.vbs" echo For Each objInstance in objInstances  
>>"%temp%\proc.vbs" echo With objInstance  
>>"%temp%\proc.vbs" echo WScript.Echo .ExecutablePath  
>>"%temp%\proc.vbs" echo End With  
>>"%temp%\proc.vbs" echo On Error Goto 0  
>>"%temp%\proc.vbs" echo Next  

cscript //nologo "%temp%\proc.vbs"|findstr /l /i /c:"C:\Easy WoW Server\0.3.5\CWRealm.exe">nul && ECHO logon-server ist online || (start CWRealm.exe &ECHO logon-server crashed ... starte neu)  

start /W Wait 2

cscript //nologo "%temp%\proc.vbs"|findstr /l /i /c:"C:\Easy WoW Server\0.3.5\CWCore.exe">nul && ECHO main-server ist online || (start CWCore.exe &ECHO main-server crashed ... starte neu )  

start /W Wait 2

cscript //nologo "%temp%\proc.vbs"|findstr /l /i /c:"C:\Easy WoW Server\0.3.5\test-realm\CWCore.exe">nul && ECHO test-server ist online || (start test-realm\CWCore.exe &ECHO test-server crashed ... starte neu)  

del "%temp%\proc.vbs"  

echo ____________________________________________________
echo pruefe in %waittime%sec erneut
echo ____________________________________________________
start /W Wait %waittime%

goto top

<edit>DeathShadow's Änderungen hinzugefügt</edit>

Grüße
rubberman
DeathShadow
DeathShadow 17.12.2009 um 22:08:32 Uhr
Goto Top
du bist ein gott XD ... nur leider geht es nicht ... die exen werden gestartet obwohl sie schon laufen ...

mfg

Der Death
rubberman
rubberman 17.12.2009 um 22:27:09 Uhr
Goto Top
Danke für die Blumen, aber Götter schreiben nicht in Foren.
Hatte ca 30 Sekunden nachdem ich das gepostet hatte die Option /b hinter findstr noch entfernt. Hoffe da hat sich nix überschnitten. Prüf mal.

Grüße
rubberman
DeathShadow
DeathShadow 17.12.2009 um 22:32:31 Uhr
Goto Top
doch hatte es sich ... hab ich entfernt ... nun sagt er mir aber das die exen laufen obwohl sie nicht laufen ... ...

MFG

Der Death
rubberman
rubberman 17.12.2009 um 22:42:01 Uhr
Goto Top
Das macht mich einigermaßen ratlos. Hast du mal parallel im Taskmanager geschaut, ob die Prozesse nicht doch im Hintergrund laufen?

Grüße
rubberman
DeathShadow
DeathShadow 17.12.2009 um 22:47:22 Uhr
Goto Top
ja hab ich ... sie laufen 100% nicht... zumindest nicht bei meinem benutzer konto ... kann es sein das dieses script user übergreifend ist ??
denn beim admin user laufen sie bereits

ich erstelle es nur um es zu testen und dan beim admin zu starten ... fals die server crashen das sie automatisch neu gestartet werden ...

MFG

Der Death

edit:
ich werde es mal testen ich starte das script mal beim admin und lasse mal ein server crashen ... mal schauen was passiert ^^

edit2:
script gestartet ... exe beendet ---> behauptet läuft ... ...

edit3:

ich habe mal selber etwas drin rum gebastelt und aus der zeile
...
findstr /l /i /c:"Easy WoW Server\ ...  
...
das gemacht
...
findstr /l /i /c:"C:\Easy WoW Server\ ...  
...

siehe da es geht ... und es ist user übergreifend ... hatte mich gewundert das er bei der ersten CWCore sagt das sie gecrasht ist und bei den anderen sie seien online ... und da war die beim admin wirklich gecrasht ... naja also problem gelöst ... THX
rubberman
rubberman 17.12.2009 um 23:10:07 Uhr
Goto Top
Yepp, userübergreifend muss das ganze sein. Werde mal auf den msdn Seiten forschen, wie die Chancen stehen, das noch in Abhängigkeit vom User zu bewerkstelligen. Falls ich was finden sollte, melde ich mich noch mal.

Grüße
rubberman
rubberman
rubberman 18.12.2009 um 23:51:26 Uhr
Goto Top
@ alle, die wissen wollen wie man den User (Process Owner) auch noch bekommt ...
die erste "unbenannte" mal in leicht abgewandelter Form:
@echo off &setlocal
>"%temp%\proc.vbs" echo Set objInstances = GetObject("winmgmts://./root\cimv2").InstancesOf("Win32_Process", 48)  
>>"%temp%\proc.vbs" echo On Error Resume Next  
>>"%temp%\proc.vbs" echo For Each objInstance in objInstances  
>>"%temp%\proc.vbs" echo With objInstance  
>>"%temp%\proc.vbs" echo ret = .GetOwner(strOwner)  
>>"%temp%\proc.vbs" echo WScript.Echo .Caption ^& ":" ^& strOwner ^& ":" ^& .ExecutablePath  
>>"%temp%\proc.vbs" echo End With  
>>"%temp%\proc.vbs" echo On Error Goto 0  
>>"%temp%\proc.vbs" echo Next  

for /f "delims=: tokens=1,2*" %%a in ('cscript //nologo "%temp%\proc.vbs"') do echo.%%a&echo.%%b&echo.%%c&echo *********  
del "%temp%\proc.vbs"  
pause

@ DeathShadow
bekommst Du sicher selbst eingebaut, oder ?

Grüße
rubberman