Installation im Hintergrund (oder zumindest Fenster minimieren)

  • Hallo,

    sry für meine Anfängerfrage

    ich möchte zwei Dinge machen.

    Mit AutoIT eine benutzerdefinierte Installation aufzeichnen
    Mit WPKG die Softwareverteilung durchführen

    WPKG fürt Installationen standardmäßig Hintergrund durch, d.h. im Normalfall ist kein Fenster zu sehen. Das genau dürfte das Problem bei AutoIT sein, denn wenn kein Fenster sichtbar ist, dann funktioniert AutoIT nicht, zumindest bei mir.

    Ich nehme folgendes Standardskript und führe dies via WPKG aus, im "visible" Modus sind alle Fenster zu sehen und es klappt im "hidden" Modus funktioniert das Skript nicht mehr. Ich habe schon mit Guisetstate und @sw_hidden getestet, nichts klappt. Vielleicht könnt ihr mir helfen:

    Skript:

    run("dia-setup-0.97.exe")
    winwait("Installer Language")
    ControlClick("Installer Language","OK","Button1")
    Winwait("Dia 0.97 Installation")
    Controlclick("Dia 0.97 Installation","&Weiter >","Button2")
    Controlclick("Dia 0.97 Installation","Weiter >","Button2")
    controlclick("Dia 0.97 Installation","&Weiter >","Button2")
    controlclick("Dia 0.97 Installation","&Installieren","Button2")
    Winwait("Dia 0.97 Installation","Die Installation von Dia 0.97 wird abgeschlossen")
    controlclick("Dia 0.97 Installation","&Fertig stellen","Button2")

    --------------------------------------------------------------------------------------------

    lg,

  • Hallo,

    ich würde versuchen über CMenu oder die datei über die Dosbox aufrufen mit dem zusatz /? heraus zu finden, ob es Vielleicht vom Installer her bereits einen Silentschalter für die Software gibt.

    Gruß
    Dirk

    Hab grad mal nachgeschaut, für DIA ist der Parameter /S. Damit wird die Software im Hintergrund installiert.

    run("dia-setup-0.97.exe /S")
    Damit sollte es gehen. :D

    2 Mal editiert, zuletzt von Dirk Roth (25. Mai 2009 um 15:41)

  • Danke für deine Info.

    Ich habe ehrlich gesagt gehofft, dass mir jemand sagen kann, ob man mein Skript ändern kann, sodaß es im Hintergrund läuft und gleichzeitig alle Fensterabfragen durchführen kann. Sollte das normalerweise nicht mit guisetstate oder so gehen?

  • Da du die Installation durch ein anderes Tool vornehmen lässt, welches die Fenster automatisch im Hintergrund hällt, glaube ich hast du schlechte Karten. Aber so tief bin ich auch nicht in der Materie drin.

  • Werde mich wohl damit abfinden müssen, dass autoit skripte im Hintergrund nicht funktionieren.

    Zumindest hätte ich gerne, dass die Installation in einem minimierten Fenster stattfindet. Habe das Skript abgeändert aber die Fenster sind trotzdem kurz zu sehen, bevor sie in die Taskleiste verschoben werden.

    Was kann ich tun, dass das noch klappt?

    Skript:

    Run("dia-setup-0.97.exe")
    winwait("Installer Language")
    winsetstate("Installer Language","",@SW_MINIMIZE)
    ControlClick("Installer Language","OK","Button1")
    winwait("Dia 0.97 Installation","")
    winsetstate("Dia 0.97 Installation","",@SW_MINIMIZE)
    Controlclick("Dia 0.97 Installation","&Weiter >","Button2")
    Controlclick("Dia 0.97 Installation","Weiter >","Button2")
    controlclick("Dia 0.97 Installation","&Weiter >","Button2")
    controlclick("Dia 0.97 Installation","&Installieren","Button2")
    Winwait("Dia 0.97 Installation","Die Installation von Dia 0.97 wird abgeschlossen")
    winsetstate("Dia 0.97 Installation","",@SW_MINIMIZE)
    controlclick("Dia 0.97 Installation","&Fertig stellen","Button2")

    -----------------------


    Danke und lg,

  • Naja - man kann ja auch einfach einen Screenshot vor der Installation anlegen und diesen während des Setups darüberlegen.
    Mal als Beispiel:

    [autoit]

    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <ScreenCapture.au3>

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

    $hHide = _StartHiddenMode()

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

    ;----------Dein Skript---------
    ; |
    ; |
    ; |
    ;--------------------------------

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

    _StopHiddenMode($hHide)

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

    Func _StartHiddenMode()
    Local $hGUI, $hBMP, $hGraphic, $hBackground

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

    $hBMP = _ScreenCapture_Capture()

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

    $hGUI = GUICreate("ScreenShot", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP,$WS_EX_TOPMOST)
    GUISetState()

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

    _GDIPlus_Startup()

    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($hBMP)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    _GDIPlus_GraphicsDrawImage ($hGraphic, $hBitmap, 0, 0)

    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_ImageDispose ($hBitmap)
    _WinAPI_DeleteObject ($hBMP)
    _GDIPlus_ShutDown ()

    Return $hGUI
    EndFunc ;==>_StartHiddenMode

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

    Func _StopHiddenMode($hGUI)
    GUIDelete($hGUI)
    EndFunc ;==>_StopHiddenMode

    [/autoit]
  • Moin,

    [autoit]

    Run ("dia-setup-0.97.exe", "", @SW_MINIMIZE)

    [/autoit]

    AutoIt kann schon versteckte Fenster ansprechen, aaaaber ...

    Zitat

    Some controls will resist clicking unless they are the active window. Use the WinActivate() function to force the control's window to the top before using ControlClick().


    Gruß
    Greenhorn


  • Danke für eure Hife.

    Ich habe das Skript so programmiert, dass das Installationsfenster in der Taskleiste abgelegt wird, so stört es nicht mehr. Eine Installation im Hintergrund zu starten funktioniert mit AutoIT anscheinend nicht. Hier wäre der Vorteil, dass ich auch z.b. vom Anmeldefenster aus die Installation durchführen könnte.

    Im Skript funktioniert auch @sw_hidden nicht, keine Ahnung warum. Nur @sw_minimize klappt.