Updater basteln



  • Hi,

    ich wollte mich nur Mal kurz erkundigen, ob hier jemand Kritik hat, Probleme sieht oder eine better practice auf Lager hat.

    Ich möchte gerne, dass meine neuste Software am Anfang kurz online nach Updates checkt. Falls es eins gibt, soll es automatisch installiert werden. Dafür würde ich dann einfach ein zusätzliches Update-Programm schreiben, welches alle Dateien brav runterlädt, entpackt und die Dateien des Verzeichnisses überschreibt. Nach dem Update-Check wird dies ggf. aufgerufen und das aktuelle Programm (die eigentliche Software eben) beendet. Nach dem erfolgten Update wird dann das eigentliche Programm wieder gestartet, das beim Check dann eben merkt, dass es kein Update gibt.

    Gedanken mache ich mir da ein wenig über Schreibrechte. Wenn bei der Erstinstallation alles (unter Windows) brav in C:\Programme läuft, sollte ein dort ansässiger Updater ja auch alles laden und überschreiben können, das sollte in Ordnung gehen, oder?

    Sollte ich sonst irgendwas beachten?



  • Nach Programme hat der User keine Schreibrechte. Generell darf nur ein Admin updaten. Deshalb zuerst checken ob User die Rechte hat upzudaten. Hier ist Firefox zB total dumm. Der lädt das Update, fragt nach Neustart der App und heult dann rum, dass er die Rechte nicht hat.

    Ansonsten gilt: so silent wie irgendwie möglich. Chrome macht es zB richtig.

    Und aufpassen dass du nicht in eine Updateschleife kommst aus der der User nicht mehr rauskommt. Also zB wenn Update Fehlschlägt soll nicht die nächste Aktion sein es unendlich oft nochmal zu probieren 😉



  • Und bloss nicht so einen Agent bauen, der die ganze Zeit aktiv ist und rumnervt wenn man gerade was anderes macht 😡 (Java Updater und solche Quälgeister) Es reicht wenn der sucht, wenn man das Programm starten will.



  • Cpp_Junky schrieb:

    Und bloss nicht so einen Agent bauen, der die ganze Zeit aktiv ist und rumnervt wenn man gerade was anderes macht 😡 (Java Updater und solche Quälgeister) Es reicht wenn der sucht, wenn man das Programm starten will.

    Naja, so ein Agent ist schon nicht blöd, weil der mit Admin Rechten laufen kann. Aber Java macht das natürlich sehr dumm, weil er eben ohne läuft und dann die ganze Zeit nervt und dauernd ein UAC liefert...

    Nie den User nerven. Deshalb auch Chrome als Idealbeispiel und Java und Firefox als abschreckendes Beispiel...



  • Genau, den Benutzer möchte ich auch so gut wie gar nicht nerven. Im Optimalfall sollte da stehen "Es ist ein Update vorhanden. Drücken Sie Ok, um zu installieren." und dann läuft alles, er macht alles und am Ende geht die aktualisierte Software automatisch auf.

    Wenn das Programm jedoch ohne Adminrechte läuft, aber das Update machen will, was mach ich dann? Dann muss ich den User ja nerven. Soll ich ihn dann bitten, doch bitte die Update.exe als Admin zu starten? Nerviger geht's ja nicht. Ist halt der Preis, wenn man nicht als Admin startet und somit auf Sicherheit geht. Kann ich es ihm dennoch bequemer machen? Wie macht Chrome das denn?



  • Eisflamme schrieb:

    Wie macht Chrome das denn?

    Beim installieren bekommt dein Programm ja Admin Rechte - das kannst du nutzen um einen Service zu installieren der mit Admin Rechten läuft. Google nutzt diesen Service nun um seine Programme automatisch upzudaten. Das sind 100% silent Updates. Der User wird nichtmal gefragt ob er updaten will oder nicht.

    Wenn man das nicht will, dann bleibt nur die Möglichkeit das Update still zu laden und dann den User zu Fragen ob er es installieren will - und wenn ja eben Admin Rechte verlangen.

    Firefox am Mac macht das zB sehr dumm: er fragt ob das Update geladen werden soll - dann lädt er es und dann beschwert er sich das er keine Admin Rechte hat und installiert es nicht.

    Richtig wäre, das Update still zu laden und wenn es fertig ist zu Fragen ob es installiert werden soll. IntelliJ macht das zB so, dass er fragt ob er es gleich installieren soll oder erst beim nächsten Start. Das finde ich recht praktisch.

    Wichtig ist, dass du dann Admin Rechte anforderst. Viele Programme tun das nicht und beschweren sich nur über fehlende Rechte. Aber jedes OS hat seine Möglichkeit elevated privileges anzufordern - das bitte auch tun.



  • Okay, das klingt vernünftig. Dankesehr 🙂

    Weder Dienste noch request for elevated privileges kann ich aber mit QT portabel aufbauen, vermute ich? Nun ja, dann mach ich es eben für die Haupt-OS getrennt, wird wohl eh erstmal auf Windows hinauslaufen.



  • Updater sind oft eine Plage.

    Shade Of Mine schrieb:

    Richtig wäre, das Update still zu laden und wenn es fertig ist zu Fragen ob es installiert werden soll.

    Nein bitte nicht. Benutzer mit Volumenflat oder sonst schwacher Verbindung möchten auf keinen Fall dass etwas ohne ihren ausdrücklichen Wunsch heruntergeladen wird.

    Der Updater vom Acrobat Reader hat meine Einstellungen immer ignoriert weshalb ich schließlich auf FoxIt umgestiegen bin. Nur wegen dem Updater!

    Updater müssen intensiv getestet werden wegen möglicher Probleme mit Schreibrechten oder der Firewall und Antivirensoftware. Und das auf allen gängigen Windows Versionen. Eigentlich kann man da kaum alle wesentlichen Testfälle abdecken als Einzelperson.

    Idealerweise sollte direkt bei der Installation festgelegt werden können wie der Updater sich verhält: Bescheid geben dass neue Version online ist, still runterladen, nichts tun, installation auf Nachfrage, automatische Installation u.s.w.. Und diese Einstellung sollte später jederzeit zuverlässig änderbar sein.

    Außerdem darf der Updater nicht mit dem Installer kollidieren. Bei Programmen die mit mit MSI installiert wurden kann man nicht einfach Dateien löschen, sonst wird das bei dem nächsten Softwarestart bemerkt und die Installation "repariert".

    Bei begrenzten Entwicklungsresourcen kann da eigentlich nur Crap rauskommen. Ich würde mir dreimal überlegen ob ich mir und den Usern das alles wirklich antun will. Und bitte, wo kommen wir den hin wenn jede Popelsoftware ihren eigenen Dienst mit Adminrechten laufen lässt und den Systray belagert? 😮



  • Shade Of Mine schrieb:

    Eisflamme schrieb:

    Wie macht Chrome das denn?

    Beim installieren bekommt dein Programm ja Admin Rechte - das kannst du nutzen um einen Service zu installieren der mit Admin Rechten läuft. Google nutzt diesen Service nun um seine Programme automatisch upzudaten. Das sind 100% silent Updates. Der User wird nichtmal gefragt ob er updaten will oder nicht.

    Chrome wird in das Benutzerverzeichnis installiert wo er keine Admin rechte braucht. (Warum Chrome "GoogleUpdate.exe" laufen hat ist mir schleierhaft, das könnte Chrome selber übernehmen.)
    Das ist der Grund warum es silent Updates sind, nicht wegen dem Prozess.



  • IchHasseUpdater schrieb:

    ...Und bitte, wo kommen wir den hin wenn jede Popelsoftware ihren eigenen Dienst mit Adminrechten laufen lässt und den Systray belagert? 😮

    Am besten sind diese Maus oder Tastatur "Hilfsprogramme" die sich im Tray breitmachen und einfach nur die Windows Maus/Tastatureinstellungen der Systemsteuerung anzeigen, wenn man draufklickt 😃



  • Ich habe gerade nochmal überlegt, ich muss den Updater dann ja wirklich mit dem Installationsprogramm kombinieren. msi wäre dann wirklich so ein Problem, dann lasse ich den Benutzer lieber ohne msi auswählen, wo er seine Software hinhaben möchte.

    Und wenn bei Programmstart die kurze Meldung kommt "Update ist vorhanden, installieren?", dann kann er es sich ja schließlich aussuchen, falls die Internetverbindung gerade langsam ist (dann macht mein Programm aber sowieso keinen Sinn, also ist das wohl kaum der Fall). Und wenn ich nach "Ok" noch nach Adminrechten frage, sind doch automatisch auch die Schreibrechte geklärt. Was spricht gegen diese Lösung?

    Edit: Man kann bei Visual Studio einfach unter Projekt->Eigenschaften->Linker->Manifestdatei->UAC-Ausführungsebene "requireAdministrator" angeben. Das sollte doch vermutlich für alle Windowsversionen funktionieren, oder? Edit2: Das funktioniert überhaupt nicht. Von VS erstellte manifest ist definitiv eingebunden, aber er fragt nicht nach Rechten und kann auch nichts ausführen, was Rechte benötigt. Überhaupt kann ich als normaler Benutzer auch im Programmordner nichts löschen, auch dann nicht, wenn ich den Löschen-Button mit dem Adminsymbol drücke. Nachfrage kommt zu keiner Zeit. Ich tendiere dazu mich jetzt auch einfach über fehlende Adminrechte zu beklagen...

    Ich mag es bei Software oft nicht, wenn die sich in die Benutzerordner reinschreibt, weil der Pfad einfach irre lang ist. Fändet ihr das denn eine gute Alternative?



  • David W schrieb:

    Chrome wird in das Benutzerverzeichnis installiert wo er keine Admin rechte braucht. (Warum Chrome "GoogleUpdate.exe" laufen hat ist mir schleierhaft, das könnte Chrome selber übernehmen.)
    Das ist der Grund warum es silent Updates sind, nicht wegen dem Prozess.

    Also unter OS X ist das definitiv nicht so. Und Windows habe ich gerade keins da um es dort zu testen...

    @Eisflamme
    Software in den Benutzerordner ist schlecht und Sicherheitstechnisch eine Katastrophe - deshalb würde es mich wundern wenn Chrome das unter Windows so macht. Mal abgesehen von Multiuser Systemen wo sowas sowieso eine dumme Idee ist, ist es halt Sicherheitstechnisch ein Wahnsinn.

    Du kannst über das Manifest einen UAC Dialog anfordern. Du kannst in den Einstellungen der Software ja meinetwegen das automatische laden von Updates deaktivieren lassen - aber im Prinzip ists ideal wenn die Software das Update im Hintergrund lädt und beim starten das Update anbietet (falls du nicht automatisch installieren willst). Automatisch ist natürlich die beste Lösung.

    Und diese Update Services sollen sich natürlich nicht ins Systray legen sondern im Hintergrund laufen - bzw. eben nur ab und zu angestoßen werden...



  • Shade Of Mine schrieb:

    David W schrieb:

    Chrome wird in das Benutzerverzeichnis installiert wo er keine Admin rechte braucht. (Warum Chrome "GoogleUpdate.exe" laufen hat ist mir schleierhaft, das könnte Chrome selber übernehmen.)
    Das ist der Grund warum es silent Updates sind, nicht wegen dem Prozess.

    Also unter OS X ist das definitiv nicht so. Und Windows habe ich gerade keins da um es dort zu testen...

    so ist es aber unter Windows.



  • Shade Of Mine schrieb:

    Und diese Update Services sollen sich natürlich nicht ins Systray legen sondern im Hintergrund laufen - bzw. eben nur ab und zu angestoßen werden...

    Update-Service braucht man mMn. gar keins, das kann das Programm doch übernehmen wenn es normal läuft.
    Jedes mal wenn die Software gestartet wird guckt sie nach ob ein Update fertig runtergeladen wurde. Wenn ja -> anbieten zu installieren. Wenn nein guckt sie ob ihr Updater-Daemon schon läuft. Wenn ja -> fertig. Wenn nein nachgucken ob's Zeit zum nachgucken ist. Wenn ja nachgucken ob es ein neues Update gibt. Wenn ja den Updater-Daemon starten, der das dann runterlädt.

    So braucht man kein Service und die Software wird auch keinen Traffic mehr erzeugen sobald sie nicht mehr gestartet wird.



  • zwutz schrieb:

    Shade Of Mine schrieb:

    David W schrieb:

    Chrome wird in das Benutzerverzeichnis installiert wo er keine Admin rechte braucht. (Warum Chrome "GoogleUpdate.exe" laufen hat ist mir schleierhaft, das könnte Chrome selber übernehmen.)
    Das ist der Grund warum es silent Updates sind, nicht wegen dem Prozess.

    Also unter OS X ist das definitiv nicht so. Und Windows habe ich gerade keins da um es dort zu testen...

    so ist es aber unter Windows.

    Habs extra nachgesehen: http://imageshack.us/photo/my-images/849/bildschirmfoto20120814u.png/
    Ist also definitiv nicht der Fall.

    Mag aber so sein, wenn man als User installiert. Da er dann ja nicht nach Programme installieren kann. Ist aber eine sehr sehr dumme Idee.

    @hustbaer:
    Nope.
    Damit verlangst du jedesmal vom User elevated privileges. Die er dir uU nicht geben kann. Der Service hat den Vorteil dass er mit den notwendigen Rechten läuft und nicht extra danach fragen muss. Ein User muss ja nicht unbedingt Admin Rechte haben...



  • Shade Of Mine schrieb:

    @hustbaer:
    Nope.
    Damit verlangst du jedesmal vom User elevated privileges. Die er dir uU nicht geben kann. Der Service hat den Vorteil dass er mit den notwendigen Rechten läuft und nicht extra danach fragen muss. Ein User muss ja nicht unbedingt Admin Rechte haben...

    Willst du das Update vom Service installieren lassen? Hm...
    Weiss nicht ob ich das so gut finde.

    Wo ist das Problem wenn im Falle eines Updates ein UAC Fenster aufpoppt? (Zum Checken/Runterladen/... braucht er ja keine Elevation, bloss zum Installieren)



  • zwutz schrieb:

    Shade Of Mine schrieb:

    David W schrieb:

    Chrome wird in das Benutzerverzeichnis installiert wo er keine Admin rechte braucht. (Warum Chrome "GoogleUpdate.exe" laufen hat ist mir schleierhaft, das könnte Chrome selber übernehmen.)
    Das ist der Grund warum es silent Updates sind, nicht wegen dem Prozess.

    Also unter OS X ist das definitiv nicht so. Und Windows habe ich gerade keins da um es dort zu testen...

    so ist es aber unter Windows.

    AFAIK nur wenn man Chrome direkt mit einem Klick auf "Google chrome jetzt installieren" auf der Google Homepage installiert. (So war es auf jeden Fall bei mir)



  • hustbaer schrieb:

    Willst du das Update vom Service installieren lassen? Hm...
    Weiss nicht ob ich das so gut finde.

    Chrome macht es zB so.
    Systemupdates funktionieren auch auf diese Weise.

    Wo ist das Problem wenn im Falle eines Updates ein UAC Fenster aufpoppt? (Zum Checken/Runterladen/... braucht er ja keine Elevation, bloss zum Installieren)

    Dass der User diese Rechte uU eben nicht hat.

    Es ist eine unsitte immer und überall Adminrechte einzufordern. Das hebelt das ganze System aus. Mittlerweile klicken die User sowieso immer nur weiter weiter weiter wenn ein UAC Dialog kommt. Die Sicherheit ist durch solche Software wie zB Firefox, Java, etc. einfach nicht mehr gegeben und das finde ich bedenklich.

    Aber gut, wenn man unbedingt keine silent updates haben will (warum auch immer) dann muss man mit einem extra Updater arbeiten. Die Software muss dann warnen dass es Updates gibt wenn der User bestätigt popt das UAC auf - sucken tut das ganze natürlich wenn der User keine Adminrechte hat - dann fühlt er sich von der Software verarscht, wie es zB Logitech sehr gut vormacht.

    Generell sollte man aber nicht einfach so nach Admin Rechten Fragen - also in so einem Fall lieber auf händische Updates vertrauen. Denn nichts ist doofer als dem User funktionalität anzubieten (neues Updates, neue Features, etc.) die er dann nicht bekommen kann.



  • Ja, alles so eine Sache. Also meine manifest-Datei funktioniert mittlerweile. Hat jedoch irgendwie einen Neustart gebraucht.

    Chrome (Win7x64) ist bei mir hier installiert:
    C:\Users\:)\AppData\Local\Google\Chrome\Application\chrome.exe

    Und hätte es mich explizit gefragt, wo ich es hinhaben möchte, hätte ich diesen Ort mit Sicherheit nicht angegeben, ich installiere nie etwas dorthin.

    Shade of Mine:
    Ja, also wenn ich nicht über den Service arbeiten sollte (einfach, weil der auch nochmal mehr Aufwand ist und ich evtl. in einem späteren Update einen besseren Updater anbiete), würde ich halt stets mit UAC den Updater aufrufen. Wenn Nutzer keine Rechte kriegen kann, sollte der Updater ja ausgeführt werden ohne Rechte zu haben, richtig? Und für den Fall zeigt der bei mir jetzt die URL an, wo man sich händisch das Update besorgen kann. Ist zwar immer noch umständlich, aber der User fühlt sich dann zumindest nicht ganz so verarscht, er kann es ja einrichten (wobei er zum Runterladen und installieren auch wieder Adminrechte braucht... d.h. im Grunde genommen, kann er einfach den Updater mit Adminrechten starten).



  • Shade Of Mine schrieb:

    ...

    Wo ist das Problem wenn im Falle eines Updates ein UAC Fenster aufpoppt? (Zum Checken/Runterladen/... braucht er ja keine Elevation, bloss zum Installieren)

    Dass der User diese Rechte uU eben nicht hat.

    Es ist eine unsitte immer und überall Adminrechte einzufordern. Das hebelt das ganze System aus. Mittlerweile klicken die User sowieso immer nur weiter weiter weiter wenn ein UAC Dialog kommt...

    Und es nervt natürlich auch einfach. Gegen gewisse Updater hab ich bereits eine solche Antipathie entwickelt das ich reflexartig auf "Nein" klicke damit ich kurzfristig meine Ruhe hab. Nur in sehr entspannten Augenblicken installier ich mal irgendwas, das mehr als einen Mausklick Aufwand erfordert.


Log in to reply