Windows Components Wizard unter XP/W2003

  • Hallo Ich habe eine Script geschrieben mit dem ich nachträglich bestimmte Windows Komponente installiere.
    Dies funktioniert auch alles soweit super.
    Nachdem die entsprechenden Komponente ausgewählt und die Windows Pfade zur Installation angepasst wurden, läuft die ProgressBar bis zur Finish Meldung.
    Momentan habe ich einen Timer eingestellt, der dann irgendwann den "Finish" Button betätigt.
    Leider hat dies einen Hacken, entweder setze ich den Timer so, dass ich auch für langsamere PC die Zeit einstelle oder hab die Gefahr, dass bei schwächeren PCs/Server der Finish Button nicht betätigt wird
    Daher wollte ich Fragen, ob es möglich ist, dass das AutoIT Script automatisch erkennt, wann die Finish Taste verfügbar ist und diese dann auch anklickt?
    Leider kenne ich mich mit AutoIT nach 2 Wochen noch nicht so aus.

    Anbei mein jetztiger Code wo ich versucht habe (ab Zeile 76) eine Abfrage zu erstellen.

    Danke schon mal im Vorraus!

    [autoit]

    ;Windows Komponente installieren für Standard Server

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

    ;Windows Components Wizard aufrufen
    Run(EnvGet("systemdrive") & "\Windows\system32\control.exe appwiz.cpl,,2")
    WinWaitActive("Windows Components Wizard")

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

    ;Hyper Terminal installieren
    ControlCommand("Windows Components", "", "ListBox1", "SelectString", "Accessories and Utilities")
    WinWaitActive("Accessories and Utilities")
    ControlCommand ("Accessories and Utilities", "", "ListBox1", "SelectString", "Communications")
    WinWaitActive("Communications")
    ControlCommand ("Communications", "", "ListBox1", "SelectString", "HyperTerminal")
    ControlSend("Communications", "", "ListBox1", "{Space}{ENTER}")
    WinWaitActive("Accessories and Utilities")
    Send("{ENTER}")

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

    ;IIS insallieren
    WinWaitActive("Windows Components Wizard")
    ControlCommand("Windows Components", "", "ListBox1", "SelectString", "Application Server")
    WinWaitActive("Application Server")
    ControlCommand("Application Server", "", "ListBox1", "SelectString", "Internet Information Services (IIS)")
    WinWaitActive("Internet Information Services (IIS)")
    ControlCommand ("Internet Information Services (IIS)", "", "ListBox1", "SelectString", "Backround Intelligent Transfer Service (BITS) Server Extensions")
    ControlSend("Internet Information Services (IIS)", "", "ListBox1", "{Space}")
    ControlCommand ("Internet Information Services (IIS)", "", "ListBox1", "SelectString", "File Transfer Protocol (FTP) Service")
    ControlSend("Internet Information Services (IIS)", "", "ListBox1", "{Space}{ENTER}")
    WinWaitActive("Application Server")
    Send("{ENTER}")

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

    ;Internet Explorer Enhanced Security Configuration entfernen und Management an Monitoring Tools installieren
    WinWaitActive("Windows Components Wizard")
    ControlSend("Windows Components", "", "ListBox1", "Internet Explorer")

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

    ;Management and Monitoring Tools installieren
    WinWaitActive("Windows Components Wizard")
    ControlCommand("Windows Components", "", "ListBox1", "SelectString", "Management and Monitoring Tools")
    WinWaitActive("Management and Monitoring Tools")
    ControlCommand ("Management and Monitoring Tools", "", "ListBox1", "SelectString", "Connection Manager Administration Kit")
    ControlSend("Management and Monitoring Tools", "", "ListBox1", "{Space}")
    ControlCommand ("Management and Monitoring Tools", "", "ListBox1", "SelectString", "Network Monitor Tools")
    ControlSend("Management and Monitoring Tools", "", "ListBox1", "{Space}")
    ControlCommand ("Management and Monitoring Tools", "", "ListBox1", "SelectString", "Simple Network Management Protocol")
    ControlSend("Management and Monitoring Tools", "", "ListBox1", "{Space}")
    ControlCommand ("Management and Monitoring Tools", "", "ListBox1", "SelectString", "WMI SNMP Provider")
    ControlSend("Management and Monitoring Tools", "", "ListBox1", "{Space}{ENTER}")

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

    ;Network Services installieren
    WinWaitActive("Windows Components Wizard")
    ControlCommand("Windows Components", "", "ListBox1", "SelectString", "Networking Services")
    WinWaitActive("Networking Services")
    ControlCommand ("Networking Services", "", "ListBox1", "SelectString", "Simple TCP/IP Services")
    ControlSend("Networking Services", "", "ListBox1", "{Space}{ENTER}")

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

    ;Print Services for Unix installieren
    WinWaitActive("Windows Components Wizard")
    ControlCommand("Windows Components", "", "ListBox1", "SelectString", "Other Network File and Print Services")
    WinWaitActive("Other Network File and Print Services")
    ControlCommand ("Other Network File and Print Services", "", "ListBox1", "SelectString", "Print Services for Unix")
    ControlSend("Other Network File and Print Services", "", "ListBox1", "{Space}{ENTER}")

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

    ;Update Root Certificates und Next
    WinWaitActive("Windows Components Wizard")
    ControlSend("Windows Components", "", "ListBox1", "Update Root!n")

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

    ;CD Pfad angeben und Fertig stellen
    WinWaitActive("Insert Disk")
    ControlClick("Insert Disk", "", "[CLASS:Button; TEXT:OK; INSTANCE:1]")
    WinWaitActive("Files Needed")
    ControlSend("Files Needed", "", "Edit1", "C:\Install\W2K3_EN_CD1\I386{ENTER}")
    WinWaitActive("Insert Disk")
    ControlClick("Insert Disk", "", "[CLASS:Button; TEXT:OK; INSTANCE:1]")
    WinWaitActive("Files Needed")
    ControlSend("Files Needed", "", "Edit1", "C:\Install\W2K3_EN_CD1\I386{ENTER}")
    WinWaitActive("Windows Components Wizard")

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

    If ControlCommand("Windows Components Wizard", "", "Button59", "IsVisible", "Finish") Then
    Send("{ENTER}")
    EndIf

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

    WinClose("Add or Remove Programs")

    [/autoit]
  • Hi scheste, und willkommen im Forum :)

    Du kannst praktisch mit jedem Control-Befehl abfragen ob ein Control existiert oder nicht.

    Beispiel mit ControlClick:

    Zitat

    Success: Returns 1.
    Failure: Returns 0.

    Also kann ich einfach sagen, er soll solange klicken, bis kein Error (0) zurückgegeben wird. Das kann man jetzt mit mehren Schleifen machen, hier empfiehlt sich dann halt do - Until.

    [autoit]

    Do
    $test = ControlClick("Windows Components Wizard", "", "Button59")
    Sleep(100)
    Until $test <> 0

    [/autoit]

    Er Versucht jetzt also alle 100 ms auf den Button zu klicken, und prüft danach, ob der Button existiert oder nicht. Wenn er existiert, bricht er ab.

    Mit ControlClick kannst du direkt Buttons ansteuern und musst nicht auf umständliche Sends zurückgreifen.
    Ich würde dir also empfehlen dein ganzes Script auf Control-Befehle umzuschreiben, auch vor allem deshlab weil es bei mir nicht funktioniert. Weiter als das öffnen kommt er gar nicht.

    Eine gute Hilfe stellt da der AutoItMacroGenerator dar. Der zeichnet alle Mausklicks und Eingaben in Control-Befehle ab.
    findest du unter --> Scite --> Tools --> AutoItMacroGenerator (falls du den ScitePack installiert hast)

    Einmal editiert, zuletzt von anno2008 (1. Dezember 2008 um 12:15)

  • Vielen Dank für die schnelle Hilfe, ich werde es gleich im Laufe des Tages versuchen.

    Ich denke mal das Script wird bei dir deswegen nicht gehen, weil du ein deutsches OS hast.
    Da ich das Script aber ausschließlich auf englische OS anwenden werde, konnte ich für einzelne Komponente die ControlCommand String Abfrage durchführen.
    Ich hätte für die ListBox1 gerne ControlClick angewendet, aber für die einzelnen Komponente konnte ich als Basic Control Info
    nur die ListBox1 herauslesen.
    Ich schau mir den AutoItMacroGenerator, eventuell zeigt der mir einen besseren Weg :rock:

    Gruß,
    Stefan

  • Habs getestet und funktioniert echt super :)
    Ich denke mal ich bau diese Methode noch in ein paar anderen Setups ein.

    Jetzt kommt die Herausforderung wie ich den IIS bzw. den FTP davon am besten automatisch konfiguriere ;)