Autoinstall, führt alles gleichzeitig aus (ungewünscht!)

  • hiho,

    habe mehrere scripts für ein Autoinstall geschrieben, jetzt habe ich das problem wenn ich diese zu einem machen will, das er sie nicht nach einander durchgeht, sondern komplett durchläuft ohne controlclicks und alles, jedes einzelne script aber, funktioniert tadellos.

    Spoiler anzeigen
    [autoit]

    #cs
    AutoInstall
    Autor: cashmoney
    Inhalt: SnagIT
    ACDSee
    Adobe Reader
    Office + Proofing tools + Save as PDF
    MC Affee
    UltraEdit
    Lotus
    Office 2007

    coming soon:
    ATL Update
    TotalCMD
    Oracle???? falls möglich
    TDM
    #ce
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiTreeView.au3>
    #include <StructureConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <LotusFunc.au3>

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

    #RequireAdmin
    #NoTrayIcon

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

    _Snagit()
    _AdbReader()
    _ACDC()
    _Office()
    _McAffe()
    _Lotus()
    _UltraEdit()

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

    Func _Snagit()
    Run("w:\tools\SNAGIT\Version 8 25 User 3-2007\snagit_823.exe")
    WinWait("SnagIt 8.2.3 Setup")

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

    ControlClick("SnagIt 8.2.3 Setup","",293)
    ControlClick("SnagIt 8.2.3 Setup","",309)
    ControlClick("SnagIt 8.2.3 Setup","",293)
    ControlSend("SnagIt 8.2.3 Setup","",1683,"NAME")
    ControlSend("SnagIt 8.2.3 Setup","",5480,"FIRMA")
    ControlClick("SnagIt 8.2.3 Setup","",293)
    ControlSend("SnagIt 8.2.3 Setup","",1362,"KEY")
    ControlClick("SnagIt 8.2.3 Setup","",1362)
    ControlClick("SnagIt 8.2.3 Setup","",293)
    ControlClick("SnagIt 8.2.3 Setup","",293)
    ControlClick("SnagIt 8.2.3 Setup","",357)
    ;Finishclick

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

    ControlClick("SnagIt 8.2.3 Setup","",285)
    EndFunc

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

    Func _AdbReader()
    ShellExecuteWait("w:\tools\Adobe\AcrobatReader\Old\AdbeRdr920_de_DE.exe", "/msi /norestart /quiet")
    EndFunc

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

    Func _ACDC()
    Run("w:\tools\ACDSee 9\acdsee-9-0-108-de.exe")
    WinWait("ACDSee 9 Foto-Manager - InstallShield Wizard")
    ControlClick("ACDSee 9 Foto-Manager - InstallShield Wizard","",3030)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield Wizard","",2911)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield Wizard","",3030)
    ControlSend("ACDSee 9 Foto-Manager - InstallShield-Assistent","",3795,"NAME")
    ControlSend("ACDSee 9 Foto-Manager - InstallShield-Assistent","",3826,"FIRMA")
    ControlSend("ACDSee 9 Foto-Manager - InstallShield-Assistent","",3021,"KEY")
    ControlClick("ACDSee 9 Foto-Manager - InstallShield-Assistent","",3021)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield-Assistent","",3030)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield Wizard","",3030)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield-Assistent","",3178)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield-Assistent","",726)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield-Assistent","",3030)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield Wizard","",3092)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield Wizard","",2994)
    ControlClick("ACDSee 9 Foto-Manager - InstallShield Wizard","",3059)
    EndFunc

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

    Func _Office()
    RunWait("w:\Office\Office 2007\Office2007\setup.exe")
    ShellExecuteWait("w:\Office\Office 2007\InstallProofingTools.vbs")
    ShellExecuteWait("w:\Office\Office 2007\SaveAsPDFandXPS.exe", "/quiet")
    EndFunc

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

    Func _McAffe()
    Run("\\mails\netLOGON\Virenscanner\FramePkg.exe")
    WinWait("McAfee Agent")
    ControlClick("McAfee Agent","",3001)
    EndFunc

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

    Func _Lotus()
    Opt('MustDeclareVars', 1)

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

    ShellExecuteWait("w:\tools\Lotus\Notes 8.5.2\SP0\Setup_W7.vbs")

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

    Global $hGui = GUICreate('FileExplorer', 400, 400)

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

    Global Const $Delim = '\', $Delim1 = '|'

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

    Global $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360)
    Global $hWndTreeview = GUICtrlGetHandle($hTreeview)
    Global $hOk = GUICtrlCreateButton('Ok', 240, 375, 60, 22)
    Global $hCancel = GUICtrlCreateButton('Cancel', 320, 375, 60, 22)

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

    Global $hImage = _GUIImageList_Create(16, 16, 5, 1)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 3) ; Verzeichnis-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 110) ; Verzeichnis-Icon mit Haken
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1) ; Datei-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 5) ; Diskette
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 7) ; Wechseldatenträger
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 8) ; Festplatte
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 11) ; CDROM
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 12) ; Netzwerklaufwerk
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 53) ; Unbekannt
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

    GUISetState()
    GUICtrlSetStyle($hTreeview, Default, BitOR($WS_EX_COMPOSITED, $WS_EX_CLIENTEDGE))

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

    If ToolTip('Please wait...', Default, Default, 'Read Directory', 1) Then Local $aDrives = DriveGetDrive('ALL'), $iLWindex, $hRoot
    For $i = 1 To $aDrives[0]
    $iLWindex = 0
    Switch DriveGetType($aDrives[$i])
    Case 'Fixed'
    $iLWindex = 5
    Case 'CDROM'
    $iLWindex = 6
    Case 'RAMDisk'
    $iLWindex = 7
    Case 'Removable'
    $iLWindex = 4
    If StringLeft($aDrives[$i], 2) = 'a:' Or StringLeft($aDrives[$i], 2) = 'b:' Then $iLWindex = 3
    Case Else
    $iLWindex = 8
    EndSwitch
    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, StringUpper($aDrives[$i]), $iLWindex, $iLWindex)
    If DriveStatus($aDrives[$i]) <> 'READY' Then ContinueLoop
    If _GUICtrlTreeView_BeginUpdate($hTreeview) And _GUICtrlTreeView_FileExplorer($hTreeview, $hRoot, $aDrives[$i]) Then _GUICtrlTreeView_EndUpdate($hTreeview)
    Next
    ToolTip('')

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

    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hCancel
    Exit
    Case $hOk
    global $license = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, _GUICtrlTreeView_GetSelection($hTreeview)), $Delim1, $Delim)
    ;~ MsgBox(0, 'Selected Path/File', StringReplace(_GUICtrlTreeView_GetTree($hTreeview, _GUICtrlTreeView_GetSelection($hTreeview)), $Delim1, $Delim))
    ExitLoop
    EndSwitch
    WEnd
    Sleep(500)

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

    ;~ global $person = InputBox("Name","Type in the name of the person!")
    global $person = "gustav karavas"
    ;~ global $password = InputBox("Name","Type in the password for the license!")
    global $password = "oehhk5"

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

    If @OSArch = "x86" Then
    Run("c:\Program Files\IBM\Lotus\Notes\Notes.exe")
    Else
    Run("c:\Program Files (x86)\IBM\Lotus\Notes\Notes.exe")
    EndIf

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

    WinWait("IBM Lotus Notes 8.5.2 Client Configuration")
    ControlClick("IBM Lotus Notes 8.5.2 Client Configuration","",5)
    ControlSend("IBM Lotus Notes 8.5.2 Client Configuration","",210,$person)
    ControlSend("IBM Lotus Notes 8.5.2 Client Configuration","",211,"dedlns16/sandvik")
    ControlClick("IBM Lotus Notes 8.5.2 Client Configuration","",5)
    Sleep(4000)
    ControlClick("IBM Lotus Notes 8.5.2 Client Configuration","",5)

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

    ControlClick("IBM Lotus Notes 8.5.2 Client Configuration","",213)
    Send("{up}")
    Send("{up}")
    Send("{Enter}")

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

    ControlSend("IBM Lotus Notes 8.5.2 Client Configuration","",282,"dedlns16.sandvik.com")
    ControlClick("IBM Lotus Notes 8.5.2 Client Configuration","",5)
    sleep(4000)
    ControlSend("IBM Lotus Notes 8.5.2 Client Configuration","",197,$license)
    ControlClick("IBM Lotus Notes 8.5.2 Client Configuration","",5)
    WinWait("IBM Lotus Notes")
    ControlClick("IBM Lotus Notes","",6)

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

    EndFunc

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

    Func _UltraEdit()
    ;~ Opt("WinTitleMatchMode",2)

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

    Run("w:\tools\ultraedit\uesetup.exe")

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

    WinWait("UltraEdit-32 v11.20b Setup")
    WinActivate("UltraEdit-32 v11.20b Setup")
    ;~ ControlClick("UltraEdit-32 v11.20b Setup","","[CLASS:ListBox; INSTANCE:1]","left",1,54,23)
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{TAB}")
    ;~ WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{TAB}")
    ;~ WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{TAB}")
    ;~ WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{TAB}")
    ;~ WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Space}")
    ;~ WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")
    Send("{Enter}")
    WinActivate("UltraEdit-32 v11.20b Setup")

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

    ControlClick("UltraEdit-32 v11.20b Setup","","[CLASS:Button; INSTANCE:1]")

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

    ;~ WinMove("UltraEdit-32 v11.20b Setup","",1,1)
    ;~ MouseClick("left",38,12,1)
    ;~ $test = ControlClick($hwin,"","[CLASS:Button;INSTANCE:1]")
    ;~ MsgBox(0,"",$test)

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

    ;~ ControlClick("Adobe Reader 9.2 - Assistent","",4136)
    ;~ ControlClick("Adobe Reader 9.2 - Assistent","",4106)
    EndFunc

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

    Einmal editiert, zuletzt von cashmoney (14. Juli 2011 um 08:16)

  • Du solltest auf jeden Fall die Text Parameter verwenden. Und zwar mit eindeutigen Texten.
    Sonst bekommst du fast immer Probleme.
    Auch die Sends würde ich ersetzten durch Controlsend o.Ä.

    Statt den Control ID's verwende ich immer die Klasse (siehe Wininfotool)
    Weil ich schon Setups hatte in denen die ID nicht immer gleich war.

    Eigentlich sollten die Setups nacheinander ausgeführt werden (du rufst ja die Funktionen nacheinander auf...)
    Ich denke dein Problem liegt an den Text-Parametern die du nicht verwendest

  • ah ok, verständlich, was kommt den rein für die Textparameter? der Text der in dem jeweiligen Button/Editbox steht?

    also ich hab in jedem einzelnen fenster die ID´s ausgelesen, und so eingetragen, deswegen bleib ich mal bei den IDs und nimm nicht die Klasse.

  • Also nur ums nochmal sicherzustellen, ich mein den 2ten Parameter bei z.B. WinWait() oder Controlclick()
    Und das ist der Fenstertext (oder ein Teil davon). Der sollte halt möglichst eindeutig sein.
    Sowas wie "Installation abgeschlossen" z.B. kommt ja normalerweise in nur einem Fenster der Installation vor

  • ja den meine ich auch :D aber welcher text kommt da rein? aus der autoit window info tool...

    visible text? oder unter dem Tab control: Text

  • ja hab ich grad versucht, schon beim ersten fenster macht er garnix^^ mus ich den kompletten text nehmen oder reicht einfach ein teil der irgendwo drin steht?

    EDIT: mein fehler, jetzt funktioniert mit dem Text, jetzt aber noch das problem das es manchmal klappt manchmal nicht, soll da vll noch ein sleep(100) rein? das er etwas zeit hat? oder gibst ne function damit er wirklich solang wartet bis das fenster voll geladen ist... meiner meinung nach laden die fenster zu langsam und das script ist zu schenll

    Einmal editiert, zuletzt von cashmoney (14. Juli 2011 um 11:00)

  • Ich hatte schon die Erfahrung gemacht, dass winwait nicht sehr zuverlässig arbeitet und die Befehle dann zu früh ausgeführt werden. Da hilft entweder ein simples sleep(), was aber auch nicht unbedingt zuverlässig sein muss, oder aber du schreibst dir eine eigenen Wait Funktion. Du könntest zum Beispiel immer das erste Fenstercommand in einer do until Schleife wiederholen lassen, bis dass der Rückgabewert keinen Fehler mehr liefert.

    [autoit]


    Func _Snagit()
    Run("w:\tools\SNAGIT\Version 8 25 User 3-2007\snagit_823.exe")
    ;WinWait("SnagIt 8.2.3 Setup")
    do
    sleep(100) ; kurz warten um nicht unnötig oft zu probieren ob das Control schon existiert...
    $check = ControlClick("SnagIt 8.2.3 Setup","",293) ; liefert 0 wenn ein Fehler auftritt, liefert 1 wenn alles ok war...
    if $check = 0 then consolewrite(@CRLF & "Snagit Command 1 Fehler: " & $check)
    until $check=1
    ;...
    EndFunc

    [/autoit]