skid
Goto Top

VB6 Variablen von einem Skript (.exe) in eine andere (.exe) übergeben

Hi,

habe da ein kleines Problem mit der Übergabe von Variablen aus einem Skript in das andere.
Ich habe 2 Skripte in VB6 erstellt und beide zu einer .EXE kompiliert.
Das eine Skript ruft sozusagen mit Administratorrechten das andere auf.
Im Skript sollen nun 2 Werte ausgelesen und diese im zweiten Skript weiterverarbeitet werden.

Habe hier im Forum schon ein Beispiel gefunden wie es Funktionieren soll und an mein Skript angepasst :

Set wshShell = CreateObject("WScript.Shell")  

wshShell.Run ScriptPath & "PSEXEC -u" & " Domäne\Adminuser" & " -p" & " Passwort " & Skript2 & " """ & Var1 & """ """ & Var2 & """", 0, True  

Das Funktioniert auch soweit - das 2. Skript wird aufgerufen.

Um das ganze auch zu Prüfen ob die 2 Variablen übergeben werden habe ich im 2. Skript das hier stehen:

Var1 = WScript.Arguments(0)
Var2 = WScript.Arguments(1)
MsgBox Var1 & Var2
Nur bekomme ich die Fehlermeldung : Laufzeitfehler 424 - Objekt erforderlich

Hat jemand evtl. eine Idee woran das liegen kann ??
Vielleicht ist es ja nur eine Kleinigkeit face-wink

Gruss
SKID

Content-ID: 78878

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

Ausgedruckt am: 05.11.2024 um 19:11 Uhr

misterdemeanor
misterdemeanor 23.01.2008 um 11:16:17 Uhr
Goto Top
Hallo SKID,

Du willst also herausfinden mit welchen Argumenten Deine .Exe ANWENDUNG aufgerufen wurde...

In VB6 gibt es in der Sub Main dummerweise kein Parameter-Array Argument...allerdings existiert die Function Command(). Mit dieser kannst Du Dir die beim Aufruf mitgegebenen Argumente als String abrufen.

Da Du ja wohl mindestens zwei Argumente beim Aufruf übergeben lassen willst solltest Du einen entsprechenden Delimiter vorschreiben...z.B. ein einfaches Leereichen zwischen den Argumenten. So fällt Dir das extrahieren der einzelnen Startparameter leichter.

Dim cmdLineArgs() As String

  cmdLineArgs=Split(Command," ")  

Nun hast Du Dein Kommandozeilen Argumenten Array.

BTW: Was bei Dir die Fehlermeldung verursacht:

Du hast wahrscheinlich keine Instanz der WScript.Shell in Anwendung2 erstellt.

Was nicht davon ablenkt das dort der logische Fehler liegt:

Es wäre 1) ohnehin nutzlos da Du in zwei verschiedenen Anwendungen agierst.
2) Würde Dir das sowieso nicht weiterhelfen weil (z.B.) WScript.Arguments(0) gar nichts mit Den Aufrufparametern Deiner Anwendung2 zu tuen hat.

Möglicherweise liege ich aber vollkommen falsch da Dein Post etwas verwirrend war: Du schreibst von Skripten als kompilierte .Exe Dateien. Auch war mir nicht ganz klar ob Du Deine beiden Skripte als eine ".Exe" kompiliert hast-->sogesehen ja nicht möglich. Es sei denn Du rufst in Deiner .Exe die gleiche Skript .Exe auf. In diesem und vielen anderen Fällen wäre Dir dann mal das Schlagwort Component Object Model um die Ohren gefeuert. Nur nochmal um eines klarzustellen: Wenn Du in VB6 etwas programmierst und kompilierst...ist es kein Script.

Sage mal Bescheid ob Dir das helfen konnte face-wink

BG, Felix
skid
skid 23.01.2008 um 13:28:08 Uhr
Goto Top
Hi Felix,

danke für den Tip.

Werde mal versuchen das ganze auf die Reihe zu bekommen.
Bin nicht soo Fit in Sachen VB face-wink
Bisher bekomme ich nur den Fehler beim Kompilieren das ein Array erwartet wird !?
Mal gucken was das wieder ist.....

Gruß
SKID
misterdemeanor
misterdemeanor 24.01.2008 um 05:04:52 Uhr
Goto Top
Guten Morgen,

Bisher bekomme ich nur den Fehler beim
Kompilieren das ein Array erwartet wird !?
Mal gucken was das wieder ist.....


Hoppla...

mein Fehler. Da schicke ich Dir zwei Zeilen "Code" und dann noch mit einem Fehler...das editiere ich mal in meinem ersten Post

So hatte ich es fälschlicherweise zuerst geschrieben:

Dim cmdLIneArgs As String()
 ...

Und so muss es in VB6 aussehen:

Dim cmdLineArgs() As String
...

editiere es wie gesagt noch im ersten Post.
skid
skid 24.01.2008 um 07:36:19 Uhr
Goto Top
Guten Morgen auch.....

aja, sieht jetzt beim Kompilieren schon besser aus face-smile

Ok, kann sein das mein Post etwas verwirrend war da ich von Scripten und .Exe rede - ich versuch´s nochmal face-wink

Also, es sind 2 .Exe (Programme).
Das erste Programm ruft das zweite auf. Im ersten Programm werden irgendwelche Werte ausgelesen die im zweiten Programm weiter verwendet werden sollen.
Das ganze hatte ich so gelöst das eine Textdatei mit den ausgelesenen Werten angelegt wird das dann vom 2. Programm wieder ausgelesen wird. Nur will ich jetzt gerne ohne die Textdateien arbeiten und die Werte so übergeben.

Wie kann ich denn in meinem zweiten Programm überprüfen ob die Werte aus dem ersten Programm übergeben worden sind ? Evtl. mit einer MsgBox ?

Wie ist eigentlich das
cmdLineArgs=Split(Command," ")  
zu verstehen ?
Muss ich anstelle von Command den Aufruf des 2. Programms schreiben ?

SKID
misterdemeanor
misterdemeanor 24.01.2008 um 08:16:57 Uhr
Goto Top
Also, es sind 2 .Exe (Programme).
Das erste Programm ruft das zweite auf.
...

Wie kann ich denn in meinem zweiten Programm
überprüfen ob die Werte aus dem
ersten Programm übergeben worden sind ?
Evtl. mit einer MsgBox ?

Du rufst ja aus Exe1 Exe2 mit den Parametern auf:

> Set wshShell =
> CreateObject("WScript.Shell")  
> 
> wshShell.Run ScriptPath & "PSEXEC  
> -u" & "  
> Domäne\Adminuser" & "  
> -p" & " Passwort " &  
> Skript2 & " """ &  
> Var1 & """  
> """ & Var2 &  
> """", 0, True  
> 

So wie ich das verstehe wird Exe2 also nicht eigenständig sondern eben von Exe1 aus gestartet und somit müsste ja klar sein das Parameter vorhanden sind. Aber mittels der Function Command kannst Du ja überprüfen ob Werte übergeben worden sind.
skid
skid 24.01.2008 um 10:16:11 Uhr
Goto Top
So, jetzt Funktioniert´s so wie es soll - kann jetzt die Werte auslesen face-wink

Dank Dir für Deine Hilfe !!!

SKID