Updater

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Updater

Beitrag von Scotty »

Ich habe mein Programm kürzlich auf Standardverzeichnisse umgestellt (GetConfigPath etc.) und überlege nun, wie ich meinem Autoupdater beibringen kann, die Anwendung selbst zu aktualisieren. Zwei Probleme habe ich dabei primär: Wie kann ich System übergreifend Administratorrechte bekommen? Und wie kann ich den tatsächlichen Ort der Anwendung ermitteln (ExeName funktioniert ja nicht)? Zum Updaten würde ich die alte Exe unter Windows nach Bak umbenennen und die neue Datei dann dorthin entpacken. Unter Linux (und wahrscheinlich auch Darwin) kann man die Anwendung einfach überschreiben. Allerdings klappt das Umbenennen zurzeit im Verzeichnis mit Schreibrechten unter Windows auch nicht. Vielleicht hat da jemand noch einen Tipp.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Updater

Beitrag von Hitman »

Ich schätze mal bezüglich Admin-Rechte beziehst du dich auf UAC (von Vista und aufwärts). Dafür brauchst du "nur" im manifest deiner Anwendung entsprechende elevation level festlegen, dann wird die Anwendung ggf. immer als Admin gestartet (mit der entsprechenden UAC Nachfrage natürlich).

Um an die Pfade für deine Anwendung zu kommen würde ich empfehlen, den Updater von der Anwendung aus starten zu lassen. Dann kannst du alles nötige als Parameter übergeben. Oder du triffst die Annahme, dass der Updater immer im selben Verzeichnis wie die Anwendung liegt, dann kannst du wieder ParamStr(0) bzw. Application.ExeName nutzen.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Updater

Beitrag von Scotty »

Hitman hat geschrieben:...dann wird die Anwendung ggf. immer als Admin gestartet.
So etwas will ich auf gar keinen Fall.
Die Idee mit dem Pfad wäre schon mal eine Lösung. Bisher wird alles intern geregelt, aber ich kann natürlich eine Batchdatei o.ä. einkompilieren und die dann entsprechend starten.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Updater

Beitrag von Hitman »

Scotty hat geschrieben:So etwas will ich auf gar keinen Fall.
Wieso das? Um das Update durchzuführen, muss es doch auf jeden Fall als Admin laufen.
Das nächste Problem ist allerdings, dass eine Anwendung andere Anwendungen nur mit mindestens gleichem Elevation-Level starten kann. Der Updater würde - sofern er die geupdatete Anwendung starten soll - diese dann ebenfalls als Admin starten.
Vorschlag meinerseits: mach zwei Updater Executables. Eine CheckUpdate und eine DoUpdate (oder so ähnlich). Die CheckUpdate läuft "normal" (nicht elevated). Stellt diese eine neue Version fest, beendet sie die Hauptanwendung, startet elevated DoUpdate und wartet, bis dieses fertig ist. Danach startet es die Anwendung neu und beendet sich. So hast du nur Elevation wenn es nötig ist (wenn tatsächlich ein Update vorliegt) und nicht das Problem, dass das Elevation Level der Anwendung dann nicht stimmt.

Antworten