0cool
Goto Top

Visual Basic Script Programm mit Parameter öffnen

Hallo Leute,

ich bin dabei ein Script zu schreiben, mit dem ich mehrere Programme öffne. Das klappt auch soweit ganz gut, bis auf die Programme die mit Parametern aufgerufen werden müssen.

Ein Paar Vorab infos:
OS: Vista
Script Sprache: VBScript

Mein ansatz zum öffnene des Programms:

set wshShell = CreateObject("WScript.Shell")  
set objwshShell = WScript.CreateObject("WScript.Shell")  

paraC = "-para1 name -para2 -para3"  
path = objwshShell.Environment("Process")("ProgramFiles")  

wshShell.Run ("""" & path & "\Firma\ProgramName\Version\Client\programm.exe"  & """" & " " &  paraC),0  

Das Programm öffnet sich zwar doch leider ohne die parameter zu beachten.

Wie bekomme ich mein vorhaben hin?


Danke im vorraus für eure Hilfe!


Gruß

0cool

Content-Key: 168121

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

Printed on: April 24, 2024 at 08:04 o'clock

Member: Logan000
Logan000 Jun 16, 2011 at 11:11:16 (UTC)
Goto Top
Moin moin

Wenn ich raten müste wüde ich sagen du hast dich mit den Hochkommas verhaspelt.
Warum baust du den String den du ausführen möchtest nicht erstmal sauber zusammen?
Etwa so:
....
runCommand = path & "\Firma\ProgramName\Version\Client\programm.exe " & paraC  
wshShell.Run runCommand 

Und was soll das mit ,0 hinter der Klammer (Zeile 7)?
Entweder du klammerst alle Parameter ein oder keine.

Gruß L.
Member: 0cool
0cool Jun 16, 2011 at 11:22:47 (UTC)
Goto Top
@Logan000: Danke für deine Antwort.

Um den Path und überprüfen ob der stimmt, habe ich die folgende codezeile eingabenaut

WScript.Echo """" & path & "\Firma\ProgramName\Version\Client\programm.exe"  & """" & " " &  paraC  

Das Ergebniss ist das folgende:

"C:\Program Files\Firma\ProgramName\Version\Client\programm.exe" -para1 name -para2 -para3

Wenn ich den Parameter 0 in die Klammer schreibe, kommt die folgende Meldung:

Fehler: Beim Aufrufen einer Unterroutine (Sub) dürfen keine Klammern verwendet werden.
Code: 500A414
Quelle: Kompilierungsfehler in Microsoft VBScript

Gruß

0cool
Member: Friemler
Friemler Jun 16, 2011 at 11:26:46 (UTC)
Goto Top
Hallo 0cool,

die Parameter müssen zusammen mit dem Programmpfad in Anführungszeichen eingeschlossen werden.

Gruß
Friemler
Member: 0cool
0cool Jun 16, 2011 at 11:45:57 (UTC)
Goto Top
@Friemler: Danke für deine Antwort, leider funktioniert es so auch nicht.

Bei überprüfung des Pfades bekomme ich das Ergebnis:

"C:\Program Files\Firma\ProgramName\Version\Client\programm.exe -para1 name -para2 -para3"

Beim Programm öffnen erscheint die folgende Fehlermeldung:

Fehler: Das System kann den angegebenen Pfad nicht finden.
Code: 80070002
Quelle: (null)

Das kommische ist, dass ich das Programm samt Paramter über den Ausführen Dialog nur starten kann, wenn ich fogendes eingebe:

"C:\Program Files\Firma\ProgramName\Version\Client\programm.exe" -para1 name -para2 -para3

Wo liegt der unterschied zwischen ausführen und dem VBScript?

Gruß

0cool
Member: Logan000
Logan000 Jun 16, 2011 at 12:28:33 (UTC)
Goto Top
moin

Zitat von @Friemler:
die Parameter müssen zusammen mit dem Programmpfad in Anführungszeichen eingeschlossen werden.
Sorry. Das ist jetzt Blödsinn.
Entweder:
"C:\Program Files\Firma\ProgramName\Version\Client\programm.exe" -para1 name -para2 -para3  
oder aber
"C:\Program Files\Firma\ProgramName\Version\Client\programm.exe" "-para1 name -para2 -para3"  
Wäre kein Leerzeichen im Pfad könnte man das Hochkomma gescheuder auch weglassen.

Zitat von @0cool:
Wo liegt der unterschied zwischen ausführen und dem VBScript?
Ich kenne keinen.
.....
runCommand = """" & path & "\Firma\ProgramName\Version\Client\programm.exe" & """" & " " & paraC  
wshShell.Run runCommand 
Solte funktionieren.
Gegebenenfalls müssen deine paraC auch noch mal in Hochkommas gesetzt werden.
Etwa So.
.....
runCommand = """" & path & "\Firma\ProgramName\Version\Client\programm.exe" & """" & " " & """" & paraC & """"  
wshShell.Run runCommand 

Gruß L.
Member: 0cool
0cool Jun 16, 2011 at 13:02:29 (UTC)
Goto Top
@Logan000: Danke für deine Antwort.

Das Programm startet jetzt mit deiner Variante 2, doch leider werden die Parameter ignoriert.
Hast du noch ne Idee wie ich an mein Ziel komme?

Gruß

0cool
Member: Friemler
Friemler Jun 16, 2011 at 13:06:01 (UTC)
Goto Top
Hallo 0cool,

Logan hat recht, mein Vorschlag war Blödsinn. Man sollte auch nicht versuchen, sowas noch schnell fertig zu machen, bevor der Kunde kommt... face-sad

Der Kommandostring muss genauso aufgebaut werden, als würdest Du ihn unter "Ausführen" eingeben.

Gruß
Friemler
Member: 0cool
0cool Jun 16, 2011 at 13:10:49 (UTC)
Goto Top
@Friemler: Wenn ich den Pfade so aufbaue das nur der Programm Pfad in Hochkommas steht dann öffnet er mir das Programm ohne die Parameter zu beachten.

Gruß

0cool
Member: Logan000
Logan000 Jun 16, 2011 at 13:12:39 (UTC)
Goto Top
Moin

Zitat von @0cool:
Das Programm startet jetzt mit deiner Variante 2, doch leider werden die Parameter ignoriert.
Hast du noch ne Idee wie ich an mein Ziel komme?

Nicht ohne das exakte Programm und die genauen Parameter zu kennen.

Gruß L.
Member: Friemler
Friemler Jun 16, 2011 at 13:28:01 (UTC)
Goto Top
Hallo 0cool,

dann musst Du etwas mehr über die Parameter verraten. Wenn z.B. das name in Deiner Beispiel-Parameterliste Leerzeichen enthält, muss name in Anführungszeichen gesetzt werden.

Gruß
Friemler
Member: 0cool
0cool Jun 16, 2011 at 13:46:01 (UTC)
Goto Top
@Friemler: das Aufbau des Pfades und der Parameter ist genau so wie ich es geschrieben hatte.

Pfad samt Paramerter:
C:\Program Files\Firma\ProgramName\Version\Client\programm.exe -para1 name -para2 -para3

Das einzige was von mir geändert wurde, sind die Namen aber das ist ja klar ersichtliche. face-big-smile

Was willst du den noch wissen, ich geb dir jede Auskunft die ich dir geben kann bzw. darf.


Gruß

0cool
Member: Friemler
Friemler Jun 16, 2011 at 14:14:16 (UTC)
Goto Top
@0cool:
Dann poste doch bitte nochmal Deinen jetzigen Code. Da Du den wegen Geheimnistuerei ja immer ändern musst, überlege Dir genau, was Du änderst. Der Code aus Deinem Eröffnungsposting hätte nämlich nur eine Fehlermeldung produziert, Du hast aber geschrieben, das Programm würde sich öffnen jedoch die Parameter nicht beachten.

Gruß
Friemler
Mitglied: 76109
76109 Jun 16, 2011 at 14:32:47 (UTC)
Goto Top
Hallo 0cool!

Versuchs mal so:
runCommand = Chr(34) & Chr(34) & Path & "\Firma\ProgramName\Version\Client\programm.exe" & Chr(34) & " " & paraC & Chr(34)

Gruß Dieter
Member: 0cool
0cool Jun 17, 2011 at 09:35:12 (UTC)
Goto Top
@Friemler wie du gewünscht hast poste ich noch mal den aktuellen Code.

Am Code habe ich noch ein bissen gefeilt.

Der aktuelle Code:
' Objekte deklarieren  
set objwshShell = WScript.CreateObject("WScript.Shell")  

' variblen deklarieren  
paraC =  """" & "-para1 name"  & """"  
paraD = " -para2"  
paraE = " -para3"  
path = objwshShell.Environment("Process")("ProgramFiles")  
strsw = """" & path & \Firma\ProgramName\Version\Client\programm.exe" & """"  

' Pfad anzeigen  
WScript.Echo strsw & " " & paraC & " " & paraD & " " & paraE  

' Prgramm wird gestartet  
wshShell.Run (strsw & " " & paraC & " " & paraD & " " & paraE)  

Was ich nicht verstehe ist, das ich ein anderes VBS Projekt von mir als vorbild genomme habe und nach dem gleichen Prinzip den Code aufgebaut habe.
Der einzige Unterschied ist, das in dem Anderen Projekt das Programm robocopy mit einigen Parametern gestartet wird.


Gruß

0cool
Member: 0cool
0cool Jun 17, 2011 at 09:55:00 (UTC)
Goto Top
@76109: deine Verersion habe ich auch auch schon getestet es funktioniert bloss nicht so wie ich das will.

Der aktuelle Stand ist, das sich das Script zwar öffnet aber die Paramter werden ignoriert.


Gruß

0cool
Member: Friemler
Friemler Jun 17, 2011 at 10:29:13 (UTC)
Goto Top
Hallo 0cool,

abgesehen davon, dass in Zeile 15 Deines obigen Scripts objwshShell.Run stehen müsste, damit es funktioniert, kann ich sonst nichts falsches daran entdecken. Baue den Programmaufruf doch mal als konstanten String in das Script ein, ohne Variablen. Mal schauen was dann passiert.

Gruß
Friemler
Member: 0cool
0cool Jun 17, 2011 at 11:18:53 (UTC)
Goto Top
@Friemler: du hast recht mit der objektzuweisung. Ich habe nur vergessen die Zeile mit zu posten.

Die Pfadangabo ohne Variablen habe ich gerade versucht, leider hat das auch nicht funktioniert.

Gruß

0cool
Member: 0cool
0cool Jun 17, 2011 at 11:31:14 (UTC)
Goto Top
Vielen Dank an alle die mir mit rat und Tat zu seite Standen.

Ich werde den Beitrag schliessen da, ich mehr arbeit in diesen Code schnipsel reinstecke, wie das er mir nachher bringt.

Das Starten des Programms ist nur ein teil des Scriptes. Ende des Scripte schmeisse ich eine Meldung aus in der ich aufgeforder werde das Programm zu starten.
Für dieses Programm gibt es eine Desktop Verknüpfung, mit der lässt sich das Programm mit Parameter starten.

Hinweis: Über Die Desktop Verknüpfung das Programm zu starten habe ich auch schon versucht. Das hat leider auch nicht funktioniert.


Danke an euch alle!

Gruß

0cool
Member: Gertruede
Gertruede Jun 21, 2011 at 14:01:21 (UTC)
Goto Top
Hi 0cool,
ich weiss nicht, was Du willst. auf der einen Seite ist der Code fast richtig, auf der anderen Seite vielleicht völlig falsch.
Also, um grundsätzlich zu funktionieren sind 2 noch 2 Fehlerchen drin.
1. Zeile 15 wshshell muss objwshshell heißen (siehe Post von Friemler)
2. in Zeile 9 fehlt vor \Firma\Prog...... ein Gänsefüsschen, also so: strsw = """" & path & "\Firma\ProgramName\Version\Client\programm.exe" & """"

Du schreibst, das in dem Original-Projekt Robocopy gestartet wurde. Kann ich so eigentlich nicht verstehen.
wshshell ist nun mal keine DOS bzw. Command Shell. Auf die von dir genutzte Art startet man eigentlich nur reine Windows Applikationen wie z.B. Calc.exe

Sollte es eine DOS Anwendung sein, dann hast Du als nächstes Problem, dass Du zwar die exe am richtigen Ort startest, dein "Standort" aber nicht im selben Pfad ist. Wenn die EXE also etwas mit Dateien in demselben Verzeichnis anstellen soll, muss Du den Pfad dafür ebenfalls miteinbinden.

Das wäre alles viel einfacher, wenn Du hier nicht einen auf Geheimdienst machen würdest und mal ansagst, wie Du Dir den tatsächlichen Aufruf vorstellst und was Du damit wo (Pfad, nicht Firma!!!) auslösen willst
Dann klärt sich so einiges.
Grüße
Gertruede