Stilles Update v. Firefox per Befehlzeile OHNE FF.au3 möglich?

  • Hallo liebe Auto-IT-Gemeinde,
    nur eine kurze Frage: ist es über eine Befehlszeile möglich, wenn es ein Update für Firefox gibt, dieses möglichst ohne jede weitere Abfrage zu installieren? Hatte schon mit "mar" getestet, aber da fehlt mir die Syntax dazu (und die Ahnung, fürchte ich *gg*). Hatte auch irgendwo gelesen, das es direkt ein FirefoxUpdate-Befehl gibt, aber das funktioniert auch nicht, jedenfalls bei mir. Wahrscheinlich aus oben genannten Grund. Ob es über die FF.au3 geht, habe ich noch nicht probiert, weil es mir an der Zeit fehlt, das zu testen und ich auch nicht auf allen Rechnern (ungefragt) die MozRepl installieren kann/darf....
    Hat jemand eine Idee oder eine grobe Syntax-Anleitung dazu (geplant ist irgendwann mal, das ganze per AutoIt-Gui zu verschönern - aber im Moment wünsche ich mir Zeit zu Weihnachten *gg*)?

    Für alle Ideen, Anregungen etc. und Hinweise vielen lieben Dank im Voraus.

    LG

    Willy.

    PS.: Kann man per Autoit den aktuellen Stand der JEWEILS auf dem jeweiligen PC installierten Add-Ons checken/updaten? Da hat ja jeder seine eigene Version, welche er gut findet...... Und ebenfalls möglichst ohne auf demjenigen PC noch was installieren zu müssen?!?
    Das wäre und deren Updates sind dann das nächste Problem, das ich noch vor mir herschiebe......

    Einmal editiert, zuletzt von WillyWu (12. Februar 2011 um 20:37)

  • Über Befehlszeile ka!
    Aber was ist mit:
    Menüleiste->Extras->Einstellungen...->Erweitert->[Tab]Update->Das Update automatisch herunterladen und installieren.

  • Hallo, lieber Cyberdyne, hallo, liebe Auto-It-Gemeinde,

    danke für rasche Antwort - aber die einfachste (und für zeitsparendste Lösung ist nicht erlaubt bzw. wird nicht gewünscht. Trotzdem Danke für den Hinweis, denn genau das hatte ich vergessen zu erwähnen....

    LG
    Willy.

  • Hi,

    Schau dir mal die Datei

    Zitat

    C:\Programme\Mozilla Firefox\defaults\pref\firefox.js

    an.

    Um ein Silent-Update auszuführen diese Schalter verändern!

    Zitat

    pref("app.update.enabled", true);
    pref("app.update.auto", true);
    pref("app.update.mode", 1);
    pref("app.update.silent", true);


    Bei .mode sind noch 0 und 2 erlaubt, siehe firefox.js

    Ist sogar besser als über die Befehlszeile ;)

  • Hallo, lieber Cyberdyne, hallo, liebe Auto-It-Gemeinde,

    danke Euch mal wieder und sorry für lange Pause. Die Idee mit den js-Dateien ist noch eine Überlegung wert, allerdings ging es mir erstmal m Firefox selber. Und da habe ich das so hinbekommen, wie ich es wollte..... :thumbup:
    Achtung: es gibt kürzere, es gibt sinnvollere und es gibt durchaus schnellere Versionen, allerdings war das ganze für mich selber auch sehr lehrreich. Habe deshalb mal meine eigenen Kommis und Hilfs-MSgBox nicht heraus genommen. Das Script hat mittlerweile auf 5 PC`s die aktuelle Versionen installiert, erfolgreich, weshalb ich auch nicht weiß, ob die Desinstallations-Routine klappen würde.... *gg*. Zwei Haken gibt es zu beachten: die Registry aktualisiert sich nicht ohne Neustart (und auch dann nicht perfekt bei den Test-Rechnern....), weshalb die Erfolgsmeldung über eine Txt-Abfrage erfolgen muss. Und wenn die mar-Datei nicht (auch) für Firefox registriert ist, funktioniert das Ganze Update nicht (lädt per inetget nicht die "Update.mar" sondern nur "update"). Vielleicht nützt das Ganze noch zusätzlich jemanden, für mich war es super zum testen von vielen AutoIt-Befehlen.

    Spoiler anzeigen
    [autoit]

    #include <INet.au3>
    #include <String.au3>
    #include <array.au3>
    #include<WinAPIEx.au3>
    #Include <Misc.au3>

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

    HotKeySet("{p}", "PAUSE")
    HotKeySet("^!x", "MeinExit"); Strg&Alt&X

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

    Global $pause = False
    Global $sNewestVersion, $sInstallVersion, $PF=@HomeDrive, $NameUpdDatei, $sFF_Upd_Source, $FF_DL, $FFPfad, $sInstallVersion_alt

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

    FF_InstallVS()
    FF_OnlineVS()

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

    ;Versionsvergleich:
    $result1=_VersionCompare($sInstallVersion, $sNewestVersion)
    #cs
    Erfolg: Folgende Werte:
    0 - Beide Versionen sind gleich
    1 - Version 1 ist höher
    -1 - Version 2 ist höher
    #ce

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

    If $result1 <="-1" Then; if $sInstallVersion < $sNewestVersion Then ... so ist Version 3.6.3 aktueller als 3.6.13!!!!
    MsgBox(1, " Achtung: Neue Firefox-Version verfügbar!","Sie nutzen Version: "& $sInstallVersion & ", die aktuelle Version (online) ist: " & $sNewestVersion)
    Abfrage()
    $iMsgBoxAnswer=MsgBox(36,"Starten?","Alles kopiert und heruntergeladen. Weiter zum Update selbst?")
    Select
    Case $iMsgBoxAnswer = 6 ;Yes
    ToolTip("Ja gedrückt")
    FF_Update_Start()
    Case $iMsgBoxAnswer = 7 ;No
    ToolTip("Nein gedrückt, beende Programm")
    Sleep(2000)
    Exit
    EndSelect
    Else
    Msgbox(1,"Stand Ihrer Firefox-Version","Es ist keine aktuellere Version als die installierte Version (" & $sInstallVersion & ") online verfügbar")
    Exit
    EndIf
    ;============================================================================
    Func PAUSE()
    $pause = Not $pause
    While $pause
    Sleep(50)
    ToolTip("Pause gedrückt")
    WEnd
    ToolTip("Pause beendet")
    Sleep(200)
    EndFunc
    ;============================================================================
    Func MeinExit()
    ToolTip("Programm per Hot-Key abgebrochen (Strg&Alt&X)")
    Sleep(2000)
    Exit
    EndFunc
    ;============================================================================
    Func Abfrage()
    $iMsgBoxAnswer = MsgBox(36,"Update auf Firefox....","Möchten Sie jetzt von Firefox "& $sInstallVersion & " auf Firefox "& $sNewestVersion &" updaten?")
    Select
    Case $iMsgBoxAnswer = 6 ;Yes
    ToolTip("Ja gedrückt")
    CreateDir()
    Copy()
    FF_Upd()
    FF_DownloadMar()

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

    Case $iMsgBoxAnswer = 7 ;No
    ToolTip("Nein gedrückt, beende Programm")
    Sleep (2000)
    Exit
    EndSelect
    Sleep (2000)
    EndFunc
    ;=================== Funktions =============================================
    Func CreateDir(); Directory kpl. löschen u. neu erstellen
    If FileExists($PF &"\FF_Upd") Then DirRemove($PF &"\FF_Upd",1); ? notwendig????
    ToolTip("Verzeichnis "& $PF &"\FF_Upd wurde gelöscht.")
    ;MsgBox(1,"","")
    DirCreate($PF &"\FF_Upd")
    ToolTip("Verzeichnis "& $PF &"\FF_Upd wurde neu erstellt.")
    sleep(2000)
    EndFunc
    ;============================================================================
    Func Copy(); Dateien neu kopieren
    $FFPfad = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox\" & $sInstallVersion & " (de)\Main","Install Directory")
    ;MsgBox(4096, "Firefox-Install-Pfad:", $FFPfad)
    ;FileCopy($FFPfad&"\updater.exe",$localappdata & "\Mozilla\Firefox\Mozilla Firefox\updates",1)
    FileCopy($FFPfad&"\updater.exe",$PF &"\FF_Upd",1);
    If FileExists($PF &"\FF_Upd" &"\updater.ini") then ToolTip("Datei updater.exe wurde kopiert")
    sleep (2000)
    ;FileCopy($FFPfad &"\updater.ini",$localappdata & "\Mozilla\Firefox\Mozilla Firefox\updates",1)
    FileCopy($FFPfad &"\updater.ini",$PF &"\FF_Upd",1);
    If FileExists($PF &"\FF_Upd" &"\updater.ini") then ToolTip("Datei updater.ini wurde kopiert")
    sleep(2000)
    EndFunc
    ;============================================================================
    Func FF_DownloadMar()
    $FF_DL="http://releases.mozilla.org/pub/mozilla.org/firefox/releases/" & $sNewestVersion & "/update/win32/de/"&$NameUpdDatei[0]
    ToolTip("Achtung, lade jetzt update.mar herunter (eigentl. "&$NameUpdDatei[0]&")")
    $SXX="update.mar"
    InetGet($FF_DL,$PF&"\FF_Upd"&"\update.mar",15)
    ToolTip("Download Fertig")
    if FileExists ($PF &"\FF_Upd\"&"update.mar") then ToolTip("Alles ok")
    ;If FileExists ($PF &"\FF_Upd\"&"update") Then filecopy($PF &"\FF_Upd\"&"update",$PF &"\FF_Upd\"&"update.mar") nur falls mar-Datei NICHT bei FF registriert ist=Notlösung
    EndFunc
    ;============================================================================
    Func FF_InstallVS(); Installlierte Version
    $sRegKey = 'HKEY_LOCAL_MACHINE\SOFTWARE'
    If @OSArch = 'X64' Then $sRegKey &= '\Wow6432Node'
    $sRegKey &= '\Mozilla\Mozilla Firefox'
    $sInstallVersion = RegRead($sRegKey, 'CurrentVersion')
    If @error Then $sInstallVersion = '0.0.0'
    $sInstallVersion = StringRegExpReplace($sInstallVersion, '( \(.+\))', '')
    $sInstallVersion_alt=$sInstallVersion
    EndFunc
    ;============================================================================
    Func FF_OnlineVS(); OnlineVersion
    $sFirefoxSource = BinaryToString(InetRead('http://www.mozilla.com/en-US/firefox/all.html', 0))
    $sNewestVersion = StringRegExpReplace($sFirefoxSource, '(?s).+<tr id="de".+?<td class="curVersion" >(.+?)</td>.+', '$1')
    EndFunc
    ;============================================================================
    Func FF_Upd(); Name der Update-Datei
    $sFF_Upd_Source = BinaryToString(InetRead("http://releases.mozilla.org/pub/mozilla.org/firefox/releases/"& $sNewestVersion &"/update/win32/de/"), 4)
    $NameUpdDatei = StringRegExp($sFF_Upd_Source, '<a href="(.*)">firefox', 3)

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

    $result = StringInStr($NameUpdDatei[0],$sInstallVersion)
    If $result=0 Then $NameUpdDatei[0]=$NameUpdDatei[1]
    EndFunc ;==>FF_Upd
    ;============================================================================
    Func FF_Update_Start(); eigentliches Update per CMD
    $PID = ProcessExists("firefox.exe") ; Gibt die PID des Prozesses zurück oder 0, falls der Prozess nicht gefunden wurde.
    If $PID Then ProcessClose($PID)
    ToolTip("Firefox wird beendet")
    Sleep(3000)
    ;Runwait(@ComSpec & " /c echo ""pending"" > update.status")
    Runwait(@ComSpec & " /c echo ""pending"" >"&$PF &"\FF_Upd"&"\update.status");
    sleep(2000)
    If FileExists($PF &"\FF_Upd" &"\update.status") then ToolTip("Datei update.status wurde erstellt")
    Sleep(3000)
    FileChangeDir($FFPfad)
    $cmdBefehl=$PF &"\FF_Upd" &"\updater.exe "&$PF &"\FF_Upd 0"
    RunWait(@ComSpec & " /c "&$cmdBefehl)

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

    ;===============================Ergebnis==============================================================================
    $file = FileOpen($PF &"\FF_Upd" &"\update.status", 0)
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    While 1
    $chars = FileRead($file,9)
    If @error = -1 Then ExitLoop
    If FileRead($file,10) <= Chr(64) or FileRead($file,10) >= Chr(123) then ExitLoop
    Wend
    FileClose($file)

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

    if $chars<>"Succeeded" then
    ;MsgBox(1,"info","Schit")
    ; Update gecsheitert:
    Msgbox(1, "Update Firefox:", "Von Version: " & $sInstallVersion_alt & " auf " & $sNewestVersion & " NICHT erfolgreich!")
    $iMsgBoxAnswer = MsgBox(36,"Firefox-Update gescheitert", "Möchten Sie das Update rückgängig machen")
    Select
    Case $iMsgBoxAnswer = 6 ;Yes
    ToolTip("Ja gedrückt")
    FileCopy($PF &"\FF_Upd"&"\update.log ",$FFPfad & "\uninstall\uninstall.update",1)
    ;Msgbox(1,"Test", "")
    if FileExists($FFPfad & "\uninstall\uninstall.update") then
    Tooltip("uninstall.update wurde in " & $FFPfad & "\uninstall\ erstellt.")
    Sleep (3000)
    Runwait(@ComSpec & " /k "& "helper.exe /PostUpdate",$FFPfad & "\uninstall\")
    EndIf
    Case $iMsgBoxAnswer = 7 ;No
    ToolTip("Nein gedrückt, beende Programm")
    Sleep (2000)
    Exit
    EndSelect
    Else
    ;MsgBox(1,"Info2","alles Super")
    ;If $sInstallVersion=$sNewestVersion Then funktioniert nicht wirklich dank Registry....
    Msgbox(1, "Glückwunsch, Ihr Firefox-Update:", "Von Version: " & $sInstallVersion_alt & " auf " & $sNewestVersion & " war erfolgreich!")
    EndIf

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

    EndFunc

    [/autoit]

    Nochmals danke ringsherum für die rasche Hilfe und ein Lob an das Forum insgesamt.
    LG
    WillyWu
    PS.: Und ein schönes WE