Hidden/Silent/versteckte Installation mit Progress

  • Hallo, habe jetzt schon viel Zeit damit verpracht nach dem Problem zu suchen aber finde einfach keine Lösung. Ich muss ein paar Installationsroutinen schrieben für Programme. Die Scripte laufen auch alle. Nun soll es aber so sein das die Scripte/Programfenster ... nicht mehr zu sehen ist, nur noch ein Progress Balken. Das mit dem Progress funktioniert auch, nur wie mache ich das, dass die Program/Eingabefenster versteckt sind.

    Mit Run("", @SW_Hide) habe ichs schon versucht und anderen Hide scripts aber geht alles nicht weil ich dann keine Clicks mehr setzten kann (ControlClick).

    Und eine versteckte installation mit mit Silentparametern in der RUN geht bei den Programmen nicht.

    Vielen Dank für eure Hilfe!

  • WinWaitActive("Mozilla Firefox-Installation","Willkommen")
    WinSetState("Mozilla Firefox-Installation","Willkommen", @SW_HIDE)
    ControlClick ("Mozilla Firefox-Installation", "Willkommen", 1)

    Ist das so richtig? So habe ichs auch schon probiert, funst aber nicht. Ausserdem ist da das Problem das da das Fenster immer kurz aufpoppt bei mir, und es nicht immer versteckt ist

    Einmal editiert, zuletzt von Luxenburg (5. Dezember 2008 um 11:13)

  • Firefox ist nur ein Test. Aber funst auch nicht, vielleicht mache ich ja was falsch. Silent Installation von EXE Datein kommt nicht in Frage.

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=D:\firma\ZundP\autoit\layouts\datev-update.kxf
    $Form1 = GUICreate("DATEV - SQL Update", 310, 87, 193, 125)
    $Label1 = GUICtrlCreateLabel("Ein DATEV-SQL Update wird durchgeführt", 24, 8, 253, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Progress1 = GUICtrlCreateProgress(8, 32, 289, 41)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ; Installation - Mozilla Firefox
    Opt("WinTitleMatchMode", 1)

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

    Run("mozilla_firefox.exe")

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

    WinWait("Mozilla Firefox-Installation","Willkommen")
    WinSetState("Mozilla Firefox-Installation","", @SW_HIDE)
    ControlClick ("Mozilla Firefox-Installation", "Willkommen", 1)
    GUICtrlSetData ( $Progress1, 20 )
    WinWait("Mozilla Firefox-Installation","Lizenzvereinbarung")
    WinSetState("Mozilla Firefox-Installation","", @SW_HIDE)
    ControlCommand ("Mozilla Firefox-Installation", "Lizenzvereinbarung", "Button4", "Check", "")
    ControlClick ("Mozilla Firefox-Installation", "Lizenzvereinbarung", 1)
    GUICtrlSetData ( $Progress1, 40 )
    WinWait("Mozilla Firefox-Installation","Installationsart")
    WinSetState("Mozilla Firefox-Installation","", @SW_HIDE)
    ControlClick ("Mozilla Firefox-Installation", "Installationsart", 1)
    GUICtrlSetData ( $Progress1, 60 )
    WinWait("Mozilla Firefox-Installation","Zusammenfassung")
    WinSetState("Mozilla Firefox-Installation","", @SW_HIDE)
    ControlClick ("Mozilla Firefox-Installation", "Zusammenfassung", 1)
    GUICtrlSetData ( $Progress1, 80 )
    WinWait("Mozilla Firefox-Installation","Die Installation von")
    WinSetState("Mozilla Firefox-Installation","", @SW_HIDE)
    ControlCommand ("Mozilla Firefox-Installation", "Die Installation von", "Button4", "UnCheck", "")
    ControlClick ("Mozilla Firefox-Installation", "Die Installation von", 1)
    WinWaitClose("Mozilla Firefox-Installation","Die Installation von")
    GUICtrlSetData ( $Progress1, 100 )
    MsgBox(4,"","Installation Beendet")

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

    Exit

    [/autoit]
  • Laut meinen Tests funktionieren die Control-Befehle nicht mit versteckten Fenstern. :(
    Deswegen am besten einfach die Installationsfenster aus dem Bildschirmbereich schieben (WinMove)
    Hier ein Beispiel mit der Autoit-Installation. Ist zwar nicht richtig silent, aber besser als nichts.

    Spoiler anzeigen
    [autoit]

    Opt('WinWaitDelay', 0)

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

    $title = 'AutoIt v3.2.12.1 Setup'

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

    Run('autoit-v3.2.12.1-setup.exe', '');, @SW_HIDE)
    WinWait($title, 'Welcome to the AutoIt v3.2.12.1 Setup Wizard')
    $pos = WinGetPos($title)
    WinMove($title, '', -@DesktopWidth, $pos[1])
    ControlClick($title, '', 'Button2')
    WinWait($title, 'License Agreement')
    ControlClick($title, '', 'Button2')
    WinMove($title, '', $pos[0], $pos[1])

    [/autoit]
  • das ist prizipiell auch eine Lösung. Es gibt aber trozdem noch das Problem das man das Fenster immer noch für einen kurzen Moment sieht bevor es auserhalb des Screens "gemoved" wird. Hat das jemand eine Lösung für?

  • wahrscheinlich weil nicht jede anwendung diese parameter unterstützt?!
    zb einige alte installer können damit nicht umgehen.

    zu dem thema gabs glaub ich schonmal nen tread...wenn ich mich richtig erinnere hatte ich da damals auch was gepostet...
    sin da aber auch auf keinen grünen zweig gekommen -_-

    Mfg
    Apollo 13

  • Klar, nicht jede Anwendung wird durch (diese Version) vom Wise-Installer installiert, aber es gibt inzwischen doch bei fast jeder Anwendung einen "Silent"-Schalter, den man verwenden kann. Es muss also nicht "/S" sein, häufig ist es auch -S, /silent, -silent, /q, ... Man muss 'halt schaun, welchen Parameter man braucht... (s. angegebene Links... :-))

    Falls man jetzt eine allgemeingültige Anwendung zum Starten von Installationen machen möchte, so könnte man auch die Anwendung und den zugehörigen Parameter aus einer INI (oder anderen Textdatei) auslesen und als Kommandozeile ausführen...

    (Funktioniert Install-O-Matic nicht ähnlich?)

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • das ist prizipiell auch eine Lösung. Es gibt aber trozdem noch das Problem das man das Fenster immer noch für einen kurzen Moment sieht bevor es auserhalb des Screens "gemoved" wird. Hat das jemand eine Lösung für?

    So sieht man ein Fenster nicht:

    [autoit]

    Opt("WinTitleMatchMode", 2)
    run("notepad.exe","",@SW_HIDE)
    sleep(500)
    winmove("Unbenannt","",600,600)
    winsetstate("Unbenannt","",@SW_SHOW)

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Also erstmal danke für eure Antowrten. Wie ich heraus gefunden habe funktioniert das ohne probleme mit zB Notepad, aber nicht im allgemeinen. Das mit dem Silent Parametern kenne ich. Und das geht auch bei einigen ohne Probleme. Ich muss aber zB Datev mit vielen verschiedenen Optionen und Zusatztools. Das geht nicht Über Parameter. Und das ganze wird in Unterrichtsräumen aufgespielt, wo die Anwender nur den "progress-Balken" sehen sollen.

    Vielleicht ist es möglich die Frage grundsätzlich zu klären. Ich denke das es einige Leute, wie mich, gibt die sich daran den Kopf zerbrechen, sich ewig totsuchen, und am Ende keine wirkliche Lösung finden. Vielleicht könnte ein erfahrener Autoit Programmierer mal kurz eine Grundsatzinfo schreiben, ob es möglich ist installationen "vollständig" zu verstecken, und wenn ja dann auch ein Codebeispiel. Oder man sagt: ok geht nicht.

    Ich bin bisher total begeistert von Autoit und seinen Möglichkeiten, aber das ist eine Option die für mich sehr wichtig wäre. Und wenn es im Moment nicht möglich ist, ist es vielleicht eine Anregung für eine kommende Autoit Version, bzw für fitte Programmierer die vielleicht sowas wie ne UDF schrieben.

    erstmal Danke, Luxenburg

  • Das ist eine Option die vielleicht am Ende in Frage kommt, aber mir wäre eine versteckte installation lieber. Das möchte ich mit einigen Dingen machen, nicht nur mit Istallationen. Backup, Update, .... Ich warte jetzt erstmal bis mir jemand ne eindeutige Antwort geben kann ob, und wenn dann wie, oder ob es nicht geht. Aber danke werde deine Idee mal im Hinterkopf behalten.