• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Mehrere Programme mit einer Verknüpfung starten

Mitglied seit
16.08.2001
Beiträge
6.240
Reaktionen
0
das topics sagts ja, wie genau richt ich das ein?

ich habs mit ner .cmd datei probiert in die ich folgendes reingeschrieben habe:

start c:\program files\abc\abc.exe
start c:\program files\def\def.exe
etc

problem an der sache ist, dass windows nicht mitm leerzeichen im dateipfad klarkommt und ich auch grad nicht draufkomme wie ich ein leerzeichen, wie z.b. das in "program files", ersetze. %20 wie mans aus urls kennt funktioniert nicht.

Also jemand ne idee wie ich das hinbekomme? Oder gibt es gar ne windowseigene, deutlich einfachere lösung dafür?

thx schonmal,

Greg
 
Mitglied seit
10.08.2000
Beiträge
12.908
Reaktionen
1
link auch batch file ist ne gute idee
das ganze sollte dann so aussehen:

cd "c:\program files\abc"
start "c:\program files\abc\abc.exe"
cd "c:\program files\def"
start "c:\program files\def\def.exe"


(cd brauchst du nur falls das programm seinen ausführungspfad wissen will)
 

killerchicken_inaktiv

Guest
Also, Leerzeichen mit Anfuehrungszeichen ist richtig, aber soviel ich weiss gibts in der Batch-Datei das Problem, dass die Ausfuehrung erst weiterlaeuft wenn das Programm beendet ist - das muesstest du ausprobieren, ob das klappt

Gruss
Sebastian
 

RRA^StArFiRe

Guest
Original geschrieben von killerchicken
das Problem, dass die Ausfuehrung erst weiterlaeuft wenn das Programm beendet ist - das muesstest du ausprobieren, ob das klappt

dafür benutzt man ja 'start' ;)
 
Mitglied seit
16.08.2001
Beiträge
6.240
Reaktionen
0
so danke leute, habs hinbekommen, megas lösung war fast richtig.

Es scheint, als würde windows nicht mit " am anfang des Pfades klarkommen.

das sieht in der praxis so aus, dass z.B.:

start "C:\program files\abc def\xyc.exe" nur dazu führt, dass ein leeres shell fenester geöffnet wird... ka, vieleicht hat MS mit Vista was geändert diesbezüglich.

was allerdings problemlos funktioniert ist:

start c:\"program files\abc def\xyc.exe"

aber im endefekt klappt ja alles, also thx nochmal.


Jetzt hätte ich noch ne frage: Gibt es nen einfachen weg eine überprüfung einzubauen ob das programm, welches gestartet werden soll nicht bereits läuft, damit es nicht in einer zweiten instanz gestartet wird?
 

Sacknase

Guest
schreib dir nen kleines Proggy:

befehl zum auslesen der Prozesse:

Tasklist

:8[:
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
oder kill einfach den prozess... wenn er gerade nicht aktiv ist, passiert nix... unter vista halt

taskkill *prozessname*

bsp:

TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne unbenan*"
TASKLIST /F /FI "USERNAME ne NT-AUTORITÄT\SYSTEM" /IM notepad.exe
TASKKILL /S System /U Domäne\Benutzername /FI "USERNAME ne NT*" /IM *
TASKKILL /S System /U Benutzername /P Kennwort /FI "IMAGENAME eq note*"

for further informations, my dear greg - type "taskill /?" :)

ach übrigens: das "cd" könnt ihr euch sparen:

Code:
START ["Titel"] [/D Pfad] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME] | /ABOVENORMAL | /BELOWNORMAL]
      [/AFFINITY <Hex.-Affinität>] [/WAIT] [/B] [Befehl/Programm]
      [Parameter]

  "Titel"     Der Titel des neuen Fensters.
  Pfad        Startverzeichnis.
  B           Startet Anwendung, ohne ein neues Fenster zu öffnen. Die
              Anwendung ignoriert STRG+C. Wenn die Anwendung nicht
              selbständig STRG+C überprüft, ist STRG+UNTBR die einzige
              Möglichkeit, um die Anwendung abzubrechen.
  I           Die CMD.EXE beim Aufruf übergebene Umgebung soll die neue
              aktuelle Umgebung sein.
  MIN         Startet das Fenster minimiert.
  MAX         Startet das Fenster maximiert.
  SEPARATE    Startet 16-Bit-Windows-Programm in separatem Speicherbereich.
  SHARED      Startet 16-Bit-Windows-Programm in gemeinsamen Speicherbereich.
  LOW         Startet Anwendung in IDLE-Prioritätsklasse.
  NORMAL      Startet Anwendung in der NORMAL-Prioritätsklasse.
  HIGH        Startet Anwendung in der HIGH-Prioritätsklasse.
  REALTIME    Startet Anwendung in der REALTIME-Prioritätsklasse.
  ABOVENORMAL Startet Anwendung in der ABOVENORMAL-Prioritätsklasse.
  BELOWNORMAL Startet Anwendung in der BELOWNORMAL-Prioritätsklasse.
  AFFINITY    Die neue Anwendung verwendet die als hexadezimale Zahl
              angegebene Prozessoraffinitätsmaske.
  WAIT        Startet die Anwendung und wartet auf deren Ende.
  Befehl/Programm
              Wenn ein interner Befehl oder eine Batchdatei verwendet wird,
              wird das neue CMD-Fenster mit Parameter /K gestartet.
              Das bedeutet, dass das Fenster erhalten bleibt, nachdem der
              Befehl ausgeführt wurde.
              Wenn dies nicht der Fall ist, wird das Programm entweder
              als Anwendung in einem Fenster oder als Konsolenanwendung
              gestartet.
  Parameter   Parameter, die an den Befehl oder das Programm übergeben werden
              sollen.

Hinweis: Die Optionen SEPARATE und SHARED werden auf 64-Bit-Plattformen
nicht unterstützt.

Wenn die Befehlserweiterungen aktiviert sind, wird der Aufruf von externen
Befehlen durch die Befehlszeile oder den START-Befehl folgendermaßen verändert:

Nicht-ausführbare Dateien können durch ihre Zuordnung zu einem Dateityp
    einfach durch Eingabe des Namens als Befehl aufgerufen werden (z. B. würde
    WORD.DOC die Anwendung starten, die der .DOC-Erweiterung zugeordnet ist).
    Weitere Informationen, wie Sie diese Zuordnungen innerhalb eines Befehls-
    skripts ändern, finden Sie beim ASSOC- bzw. FTYPE-Befehl.

Wird eine grafische 32-Bit-Anwendung aufgerufen, wartet CMD.EXE nicht auf
    das Beenden dieser Anwendung, sondern kehrt sofort zur Eingabeauforderung
    zurück. Das gilt NICHT, wenn diese Anwendung aus einem Befehlsskript
    heraus aufgerufen wird.

Wenn eine Befehlszeile ausgeführt wird, die mit den Zeichen CMD ohne
    Erweiterung oder Pfadname beginnt, wird CMD durch den Wert der
    COMSPEC-Variablen ersetzt. Damit wird vermieden, dass man versehentlich
    eine andere, ggf. zufällige Version der CMD.EXE verwendet.

Wenn eine Befehlszeile ausgeführt wird, die mit Zeichen beginnt, die keine
    Dateierweiterung enthalten, dann verwendet CMD.EXE den Wert der Umgebungs-
    variablen PATHEXT, um zu bestimmen, welche Erweiterungen in welcher
    Reihenfolge verwendet werden. Der Standardwert für die PATHEXT-Variable
    ist:

        .COM;.EXE;.BAT;.CMD

    Dabei ist die Syntax dieselbe wie in der PATH-Variablen, das heißt, die
    einzelnen Einträge werden durch Semikolon getrennt.

Wenn mit dem START-Befehl ein Programm bzw. Befehl aufgerufen wird und keine
entsprechende Dateierweiterung gefunden wird, aber der Name ohne Erweiterung
einem Verzeichnisnamen entspricht, wird der Explorer mit diesem Pfad
aufgerufen. Von der Befehlszeile ausgeführt entspricht das einem CD /D mit
diesem Pfad.
 
Mitglied seit
16.08.2001
Beiträge
6.240
Reaktionen
0
mhjo sacki, ich steh jetzt vor dem dilemma: google ich mich durch zig foren um es verstehen und selber zu schreiben, obwohl ich es wahrscheinlich nie wieder im leben brauchen werde, oder frage ich hier, wo sich genug leute rumtummeln, die den ganzen tag nichts anderes machen :)

taskkill kommt für mich nicht in frage, die software die ich nutze arbeitet mit ner datenbank und die würde ich ungern killen während sie in die datenbank noch schreibt oder ähnliches. Was im übrigen auch dergrund ist, warum eine zweite paralel laufende instanz nicht so prickeln ist.
 

Busta_inaktiv

Guest
tasklist /FI "IMAGENAME eq blablubb.exe"
könnte dir weiterhelfen
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
hatte ich auchschon probiert, allerdings kommst du zumindest mit ner batchfile nicht weiter, da %ERRORLEVEL% sowohl bei treffer als auch bei keinem immer "0" zurückgibt (sprich mit nem IF kommste net weiter)
 

Busta_inaktiv

Guest
kein ordentliches errorlevel, das ist wirklich mal schwach.
 
Mitglied seit
16.08.2001
Beiträge
6.240
Reaktionen
0
dann hilf mir doch mal bissel weiter, das letzte mal als ich was mit errorlevel zu tun hatte, war bei meinem 386er mit MSDOS 6.22...
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
joa also mit bordmitteln sehe ich gerade keine lösung :/
evtl hast du mit windows scripting host (gibts das unter vista in der form überhaupt noch?! oO) mehr erfolgschancen, oder halt mithilfe eines drittanbieterprogrammes

evtl probierst du das nochmal mit taskkill /im name.ext

hab das nämlich grade mit notepad gemacht -> er fragt mich ob das prog beendet werden soll. also nehme ich mal an, dass mit taskkill das programm dann einen ordnungsgemäßen shutdown durchführt. weiteres indiz dafür: es gibt den trigger /f (force, also abruptes beenden)
 

haschischtasche

Ährenpenis
Mitglied seit
28.09.2002
Beiträge
37.272
Reaktionen
7.908
Original geschrieben von Greg
Jetzt hätte ich noch ne frage: Gibt es nen einfachen weg eine überprüfung einzubauen ob das programm, welches gestartet werden soll nicht bereits läuft, damit es nicht in einer zweiten instanz gestartet wird?
falls du aus irgendeinem grund (evt ist dein problem, und dass du keine andere einfache loesung findest ja einer) autohotkey benutzen solltest: "IfWinNotExist Notepad" (ohne "").
 

Busta_inaktiv

Guest
naja, nicht so schnell aufgeben. jetzt wird's aber extrem hässlich, da die teile keine praktischen errorlevel zurückwerfen:

REM Anzahl der laufenden Prozesse von datenbankanwendung.exe in umleitung.txt speichern
tasklist | find /i /c "datenbankanwendung.exe" > umleitung.txt
REM die Anzahl in Variable _anzahl einlesen
set /p _anzahl= < umleitung.txt
REM wenn nicht min. eine Instanz läuft...
if NOT %_anzahl% GEQ 1 start datenbankanwendung.exe


das MUSS einfacher gehen, aber keine Ahnung wie man kommandozeilenausgaben von Programmen in variablen speichert oder direkt bei if auswerten lassen kann.
 
Mitglied seit
16.08.2001
Beiträge
6.240
Reaktionen
0
muchas gracias, bin leider erst heute zum ausprobieren gekommen, aber funktioniert bestens. Hab den pfad der "umleitung.txt" jetzt noch an nen ort gesetzt, wo sie niemandem stört, somit ist die lösung für mich optimal :)

thx nochmal!
 
Oben