1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Brauche Hilfe bei einer Batch-Datei!

Discussion in 'Programmieren' started by Syntax99, Apr 10, 2008.

Thread Status:
Not open for further replies.
  1. Syntax99

    Syntax99 ROM

    Hallo,
    ich habe eine Batch-Datei zum Starten von zwei Programmen (MSN und MSN Plus) erstellt, die so aussieht:

    @echo off
    start "Plus" /b "C:\Program Files (x86)\MessengerPlus! 3\MsgPlus.exe"
    start "MSN" /b "C:\Program Files (x86)\MSN Messenger\msnmsgr.exe"

    Das funktioniert auch super. Mein Problem liegt jetzt aber darin dass ich auch beide Programme gleichzeitig beenden will.
    Also MsgPlus.exe soll ebenfalls beendet werden sobald ich mein MSN beende. Denn sonst läuft es die ganze Zeit im Hintergrund weiter, obwohl es nicht mehr gebraucht wird.
    Wie muss die Batch-Datei aussehen damit das funktioniert? Oder ist sowas gar nicht möglich?
    Hab schon danach gegoogelt aber nichts gefunden was mir weiterhilft. :(
     
  2. Helloween

    Helloween Halbes Megabyte

  3. Syntax99

    Syntax99 ROM

    Ich will ja keine neue Batch Datei erstellen, die ich dann jedes mal anklicken muss um MSN zu beenden.
    Ist das irgendwie möglich dass durch schließen von Programm 2, automatisch auch Programm 1 beendet wird? Kann man das nicht in der Batch-Datei die ich zum Öffnen benutze so eintragen dass sozusagen geprüft wird ob Programm 1 noch läuft und wenn nicht, wird Programm 2 automatisch auch geschlossen?
    Wenn das nicht geht, gibts da eine andere Lösung ohne eine zweite Batch zu erstellen?
     
  4. tetrododoxin

    tetrododoxin Kbyte

    start "MSN" /Wait /b "C:\Program Files (x86)\MSN Messenger\msnmsgr.exe" sollte theoretisch erst zurückkehren, wenn msnmsgr beendet ist. Dann könnte als nächstes ein Terminate Befehl für die Plus.exe folgen.

    Hast Du das mal probiert?
     
  5. Urs2

    Urs2 Megabyte

    Programme lassen sich mit Bordmitteln nicht einfach schliessen.
    So müsste es gehen, kopiere den Code ins Notepad und benenne die Datei "WasDuWillst.VBS"

    Code:
    Set objShell = CreateObject("WScript.Shell")
    	
    	'lädt Plus - Fenstergrösse wie letztes Mal 
    objShell.Run "C:\Program Files (x86)\MessengerPlus! 3\MsgPlus.exe", 4, False
    	
    	'lädt MSN - Maxbild - und wartet bis es geschlossen wird
    objShell.Run "C:\Program Files (x86)\MSN Messenger\msnmsgr.exe", 3, True
    	
    	'ruft pcwKill zum löschen von Plus
    objShell.Run "C:\WINDOWS\pcwKill.exe /f MsgPlus.exe"
    
    	'räumt auf
    Set objShell = Nothing
    Set objNotepad = Nothing
    Zum Funktionieren braucht es noch pcwKill >> http://pcwelt-praxis.de/downloads/08-2006/pcwKill/
    Entpacke den Download und lege die pcwKill.exe ins Windows-Verzeichnis. Dann die VBS starten...

    Gruss Urs
     
  6. Syntax99

    Syntax99 ROM

    Erstmal Danke für eure Antworten! :)

    @ tetrododoxin
    Sorry, aber ich weiß nicht wirklich was du damit meinst.. und was für ein Terminate Befehl? Ich hab eigentlich keine Ahnung von Batchs, hab das mit dem gleichzeitig starten auch aus nem anderen Forum rauskopiert. :D

    @ Urs2
    Also ich habs genau so gemacht wie dus beschrieben hast aber wenn ich jetzt die VBS Datei starte, erscheint direkt ne Fehlermeldung:
    Skript: C:\blabla...\msn.VBS
    Zeile: 1
    Zeichen: 1
    Fehler: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
    Code: 800A01B6
    Quelle: Laufzeitfehler in Microsoft VBScript

    Es ist doch richtig dass ich ein neues Textdokument erstellt habe und die Endung dann in VBS umbenannt hab, oder?
     
  7. Urs2

    Urs2 Megabyte

    Richtig! Es muss aber eine unformatierte Textdatei sein, erstellt mit dem Editor, nicht mit Wordpad oder so...

    Zeile1, Zeichen1 wäre das "S" von "Set objShell = ..."
    Wenn der Script tatsächlich mit dem Editor geschrieben wurde, müsste vor dem "Set" noch ein anderes, vielleicht unsichtbares Zeichen reingerutscht sein. Geh hinter das erste Set, lösche mit Backspace alles bis zum Anschlag und schreibe das "Set" neu.

    Als erste Zeile könntest Du noch hinschreiben >
    Dim objShell

    Uebrigens:
    Da ich Deine Dateien nicht besitze, hatte ich mit Notepad getestet. Daher stammt meine letzte Zeile "Set objNotepad = Nothing". Sie ist wirkungslos und kann entfernt werden.

    Gruss Urs
     
  8. tetrododoxin

    tetrododoxin Kbyte

    Mit einem terminate-Befehl meinte ich genau etwas wie "pcwKill.exe /f MsgPlus.exe". Das ist natürlich bei Windows nicht eingebaut, nur wusste ich zu dem Zeitpunkt nicht, dass es Dir auch darum geht, sondern dachte Du wolltest lediglich das Abwarten bis zum Beenden erreichen.

    Demnach könnte Deine cmd-Datei auch so aussehen (wenn pcwkill.exe vorhanden ist)

    Code:
    @echo off
    start "Plus" /b "C:\Program Files (x86)\MessengerPlus! 3\MsgPlus.exe"
    start "MSN" /Wait /b "C:\Program Files (x86)\MSN Messenger\msnmsgr.exe"
    pcwKill.exe /f MsgPlus.exe
    Gegebenenfalls müsstest Du den Ort der pcwkill.exe noch spezifizieren, wenn sie nicht durch einfachen Aufruf gefunden wird. (Also bspw. C:\Windows\System32\pcwkill.exe ...)
     
  9. Syntax99

    Syntax99 ROM

    Ich habs jetzt nochmal mit der VBS Datei versucht und auch "Dim objShell" in die erste Zeile geschrieben, nur diesmal sagt er mir "Das System kann die angegebene Datei nicht finden" und zwar in Zeile 5.
    Zeile 5 ist bei mir:
    objShell.Run "C:\Program Files (x86)\MessengerPlus! 3\MsgPlus.exe", 4,

    Der Pfad ist aber hundertprozentig richtig. Woran kann das liegen?

    @tetrododoxin
    Mit /Wait und pcwKill.exe hats nicht geklappt. Plus läuft auch weiterhin obwohl ich MSN schließe..
     
  10. tetrododoxin

    tetrododoxin Kbyte

    Ich bin spontan nicht ganz so fit in VBS, aber die meisten Programmiersprachen behandeln einen Blackslash in Zeichenketten als Escapezeichen. Um einen tatsächlichen Backslash darzustellen muss man dann einen doppelten Backslash verwenden.

    Die Syntax müsste demnach so aussehen:
    objShell.Run "C:\\Program Files (x86)\\MessengerPlus! 3\\MsgPlus.exe", 4,
     
  11. Urs2

    Urs2 Megabyte

    Ich mache meine Tests unter XP, den Dateipfaden nach zu schliessen, geht es hier wohl um Vista. Richtig?

    - Vista benutzt die gleiche WSHost, Version 5.6, wie XP.
    - Es soll unter Vista manchmal Probleme geben, weil aus unerfindlichen Gründen die VBScript.dll nicht registriert ist. Das scheint hier aber nicht der Fall zu sein.
    - Vista hat jedoch strengere Sicherheitsvorschriften als XP.

    > Wenn nun die VBS oder die BAT "als Administrator" ausgeführt werden?
    Ich kenne Vista nicht, aber könnte es so funktionieren?

    > Unter meinem XP läuft der VBScript mit einem oder mit zwei Backslashes innerhalb der Anführungszeichen. Vista müsste da schon etwas geändert haben...

    > Unter meinem XP läuft die zuletzt genannte Batch (unter Weglassung von "MSN" oder "Plus"). Bei den verschiedenen Windowsversionen wurden Schalter bei den Batchbefehlen jedoch hinzugefügt oder entfernt. Bei Vista?

    > Für mich sieht der Pfad der MSN-Dateien komisch aus. Hat Vista solche Pfade? Mit unsinnigen Leerzeichen, Klammern...?
    Versuch >>> Tippe den Pfad genau so in die Eingabezeile ein. Startet dann MSN oder Plus?

    > Vielleicht werden unter Vista nur die Codezeilen und nicht alle Zeilen gezählt? Dann wäre die fünfte Zeile der Aufruf von pcwKill.exe. Ob dieses Tool auch unter Vista funktioniert?
    Von MS-Sysinternals gäbe es das Vista-taugliche Tool "pskill.exe" >
    >>> http://technet.microsoft.com/en-us/sysinternals/bb896683.aspx
    pskill.exe in \Windows legen und die Zeile mit pcwKill ersetzen durch >
    objShell.Run "C:\WINDOWS\pskilll.exe -t MsgPlus.exe"

    Vielleicht hat ja ein Vista-Besitzer über das trübe Wochenende Zeit, hier seine Erkenntnisse einzubringen...

    Gruss Urs
     
  12. ähm..warum nutzt du nicht einfach:

    Taskkill /F /IM (Anzeigename von Programm 1)

    Den anzeige namen siehst du im Taskmanager.
     
  13. Urs2

    Urs2 Megabyte

    @Syntax99 ...und jene, die die die Lösung irgendwann vielleicht einmal wissen möchten...

    Das Problem sind die Leerzeichen im Dateipfad.
    Bei den meisten anderen Befehlen/Programmen reicht es, den "Pfad mit Leerzeichen" in Anführungszeichen zu setzen, aber nicht beim VBS-Befehl "Run".

    Chr(34) & muss allen EXE-Aufrufen mit Leerzeichen im Pfad vorangestellt werden!

    Unter XP müsste mein VBS für Syntax99 so aussehen >
    Code:
    Dim objShell
    Set objShell = CreateObject("WScript.Shell")
    	
    	'lädt Plus - Fenstergrösse wie letztes Mal 
    objShell.Run Chr(34) & "C:\Program Files (x86)\MessengerPlus! 3\MsgPlus.exe", 4, False
    	
    	'lädt MSN - Maxbild - und wartet bis es geschlossen wird
    objShell.Run Chr(34) & "C:\Program Files (x86)\MSN Messenger\msnmsgr.exe", 3, True
    	
    	'ruft pcwKill zum Löschen von Plus
    objShell.Run "C:\WINDOWS\pcwKill.exe /f MsgPlus.exe"
    
    	'räumt auf
    Set objShell = Nothing
    

    Unter Vista könnte vielleicht das Taskkill, wie dave-brombacher schrieb, verwendet werden, ohne pcwKill, die letzte objShell-Zeile müsste dann lauten >
    taskkill /f /im MsgPlus.exe

    Da mein XP Home die taskkill.exe noch nicht enthält, konnte ich das nicht testen...

    Gruss Urs
     
Thread Status:
Not open for further replies.

Share This Page