Script zum starten anderer Scripte

  • Moin,

    der Titel klingt etwas blöd, aber mir fällt nichts besseres ein.

    Es geht darum, dass ich ein AutoIt-Script habe, welches hintereinander immer wieder ein Programm namens runasspc öffnet. Dieses Programm führt dann unterschiedliche Befehle aus (z.B. öffnet es auch neue Scripte)

    runasspc dient dazu einem eingeschränktem Benutzer für die auszuführende Aufgabe Administrationsrechte zu geben.

    Mein Skript sieht momentan folgendermaßen aus.

    Spoiler anzeigen
    [autoit]


    $computername=@ComputerName
    $typ=StringLeft($computername,2)

    [/autoit] [autoit][/autoit] [autoit]

    ;***********************
    ;Dienste starten/beenden
    ;***********************

    [/autoit] [autoit][/autoit] [autoit]

    ;Nachrichtendienst aktivieren

    [/autoit] [autoit][/autoit] [autoit]

    RunWait('runasspc.exe /cryptfile:"Nachrichtendienst.spc" /quiet')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;***********************
    ;Registry-Keys verändern
    ;***********************

    [/autoit] [autoit][/autoit] [autoit]

    ;Firmenname korrigieren
    RunWait('runasspc.exe /cryptfile:"Firmenname.spc" /quiet')

    [/autoit] [autoit][/autoit] [autoit]

    ;Capslock zu Shift umsetzen
    If ($typ="AP") Then
    RunWait('runasspc.exe /cryptfile:"CapsLock2Shift.spc" /quiet')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;Firewall-Einstellungen anpassen
    RunWait('runasspc.exe /cryptfile:"Firewalleinstellungen.spc" /quiet')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;*******************************
    ;Standard-Programme installieren
    ;*******************************

    [/autoit] [autoit][/autoit] [autoit]

    If ($typ="PC") Then

    ;Visio Viewer 2003 installieren
    If Not FileExists(@ProgramFilesDir & "\Microsoft Office\Visio Viewer") And Not FileExists(@ProgramFilesDir & "\Visio") Then
    RunWait('runasspc.exe /cryptfile:"Visio Viewer 2003.spc" /quiet')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit]

    Das Problem ist, dass die einzelnen RunWaits nur warten bis runasspc beendet ist, aber nicht bis das Script beendet ist, welches runasspc startet. In diesem Beispiel startet z.B. die Installation des Visio Viewers bevor die Einstellungen der Registry beendet worden sind.


    Hat jemand Vorschläge, wie ich das ganze sequentiell abarbeiten kann?

  • ne andere einfache Idee waere es doch von der cmdline zu starten.

    Runwait(@ComSpec & " /c start /wait runasspc.exe /cryptfile:"Firmenname.spc" /quiet")

    So haette ich auf die Schnelle gesagt.

    dann wartet cmd auf das ende und endet dann.... *g
    von hinten durch das Knie ins Auge...


    CAT

  • ich hab das ganze jetzt mal mit der Installation des Visio Viewers getestet, die dauert ja ein wenig.


    Zitat

    Original von cat1510
    ne andere einfache Idee waere es doch von der cmdline zu starten.

    Runwait(@ComSpec & " /c start /wait runasspc.exe /cryptfile:"Firmenname.spc" /quiet")

    [autoit]

    Runwait(@ComSpec & ' /c start /wait runasspc.exe /cryptfile:"Visio Viewer 2003.spc" /quiet')
    MsgBox(0,"","Installation durch")

    [/autoit]

    Die Messagebox kommt sobald das Fenster von runasspc.exe weg ist. Und erst dann startet die Installation.


    Zitat

    Original von Xenobiologist
    kannst du nicht in einer Schleife auf den Prozess prüfen?


    [autoit]

    Run('runasspc.exe /cryptfile:"Visio Viewer 2003.spc" /quiet')
    While(ProcessExists("runasspc.exe"))
    WEnd
    MsgBox(0,"","Installation durch")

    [/autoit]

    wartet nur bis zum Ende von runasspc. Eigentlich dasselbe wie mit dem runwait.

    [autoit]

    Runwait('runasspc.exe /cryptfile:"Visio Viewer 2003.spc" /quiet')
    While(ProcessExists("VVIEWER.EXE"))
    WEnd
    MsgBox(0,"","Installation durch")

    [/autoit]

    while tritt nie ein, weil so schnell nicht das Setup startet.

    [autoit]

    Runwait('runasspc.exe /cryptfile:"Visio Viewer 2003.spc" /quiet')
    sleep(1000)
    While(ProcessExists("VVIEWER.EXE"))
    WEnd
    MsgBox(0,"","Installation durch")

    [/autoit]

    funktioniert. Hat aber zwei Nachteile. 1. das sleep, was ich noch verschmerzen könnte. 2. Ich muss wissen, welche Prozesse genau runasspc bzw. die dadurch aufgerufenen Programme starten.

    Wenn es nicht anders geht werde ich wohl diese Lösung nehmen. Fällt jemandem noch was eleganteres ein?