Bluemax 10 Geschrieben 25. November 2007 Melden Teilen Geschrieben 25. November 2007 Hallo (Scripting) Gemeinde. Ich habe ein Problem mit einem VB-Script. Zu meiner grossen Schande muss ich allerdings gestehen, dass Ich vom VB-Scripting ungefähr so viel Ahnung habe, wie eine Kuh vom Fliegen. Leider habe ich keine Möglichkeit gehabt, den "Auftrag" abzubiegen ... Aufgabe: Dieses Script soll nach Abfrage eines Registry-Flags auf einem lokalen PC (OS win2K oder Win XP) eine Software (Paradox 7 Runtime) einmalig installieren, wenn dieses Flag auf "0" steht - anderenfalls (Flag = "1") soll nichts passieren. Nach erfolgreicher Installation wird das Flag auf "1" gesetzt. Im Moment (Testhalber - als proof of concept) soll die SW von einem lokalen Laufwerk installiert werden. Im Echtbetrieb wird die Installation von einer Freigabe erfolgen (UNC-Pfad). Als Installations-Benutzer ist ist ein administrativer Domänen-Account vorgesehen (hier allerdings noch nicht - die Feinheiten kommen später). Zum Problem: Die Abfrage des Flags funktioniert und die "setup.exe" wird auch aufgerufen ... danach passiert erstmal eine Weile nichts. Es kommt dann die Meldung mit dem errReturn = "3". Dass anschliessend das Flag trotzdem auf "1" gesetzt wird, ist schon ok... Warum wird das Setup der Paradox 7 Runtime nicht ausgeführt bzw. warum erhalte ich den Returncode "3"? Was bedeutet der überhaupt? Ich habe mir schon einen Wolf gesucht. Hier nun das Script. Meine Kommentare und die Zeilen für die Fehlermeldungen bitte ignorieren - die werden später wieder entfernt... Dim WSHShell Set WSHShell = WScript.CreateObject("WScript.Shell") Call Paradoxinstall() WScript.Quit '========================================================================== Sub Paradoxinstall() key = "HKCU\Test\Paradoxinstall" WScript.Echo "Paradox-Runtime Flag: "& wshshell.regread(key) If wshshell.regread(key) = "0" Then Const Administrators = True Set objService = GetObject("winmgmts:") Set objSoftware = objService.Get("Win32_Product") errReturn = objSoftware.Install("c:\RUN32\setup.exe", ,Administrators) ' ... maybe shit happened ... :-(( Wscript.Echo "Returncode: " & errReturn ' Setting flag to one after work is done ;-) WSHShell.RegWrite "HKCU\Test\Paradoxinstall", "1", "REG_DWORD" WScript.Echo "Paradox-Runtime installiert und Flag gesetzt." Else ' Next 3 lines only for testing - will be deleted WScript.Echo "Paradox-Runtime NICHT installiert und Flag NICHT gesetzt." ' setting flag to zero again - maybe shit happened ... WSHShell.RegWrite "HKCU\Test\Paradoxinstall", "0", "REG_DWORD" end If End Sub Wer kann mir helfen? Oder hat jemand so ein Problem bzw, solch eine Aufgeabe zur Zufriedenheit Aller gelöst? Vielen Dank im Voraus für Eure Hilfe. Zitieren Link zu diesem Kommentar
vmorbit 10 Geschrieben 26. November 2007 Melden Teilen Geschrieben 26. November 2007 also das mit objsoftware.install kenn iich gar nicht...bin aber auch nicht der vbscript spezialist. da dieses setup aber eine normale .exe ist würd ich sie folgendermaßen starten: Set objShell = CreateObject("WScript.Shell") und dann enteder mit run oder mit exec die anwendung starten. objshell.run => damit kannst du ein programm z.b. starten oder objshell.exec => wie run, nur dass du mit dem laufenden programm kommunizieren kannst dazu würd ich mir an deiner stelle die windows script host 5.6 doku von MS downloaden... dort kannst du alle befehle (methoden) bequem nachschlagen... Zitieren Link zu diesem Kommentar
Bluemax 10 Geschrieben 27. November 2007 Autor Melden Teilen Geschrieben 27. November 2007 Danke für den Tipp. Funktioniert prächtig - zumindest bis dahin ... Ein Problem habe ich jetzt aber immer noch: Am Ende des Setup steht eine Eingabeaufforderung "Beenden". Egal, wieviele "Sendkeys" oder/und "Sleep"-Befehle ich zwischenschalte, die Abfrage ignoriert mich... Wenn ich allerdings hergehe, und "Alt + F4" als letzte Befehl übertrage, bricht das setup während der installation ab ... Ich weiss einfach nicht, wie ich das Setup korrekt beende ... Jemand anderes vielleicht? Zitieren Link zu diesem Kommentar
Bluemax 10 Geschrieben 27. November 2007 Autor Melden Teilen Geschrieben 27. November 2007 Habs!!!! Damit funktioniert es einwandfrei: Do Until Success = True Success = objShell.AppActivate("Name_des_Fensters") Wscript.Sleep 1000 Loop Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.