AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Programmupdate im Dienst - So möglich?
Thema durchsuchen
Ansicht
Themen-Optionen

Programmupdate im Dienst - So möglich?

Ein Thema von Bernhard Geyer · begonnen am 22. Sep 2022 · letzter Beitrag vom 23. Sep 2022
Antwort Antwort
Seite 2 von 2     12   
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#11

AW: Programmupdate im Dienst - So möglich?

  Alt 23. Sep 2022, 10:35
Update.exe kann eine Laufende .exe umbennen! Das geht auch von hand im explorer... ich war auch erschrocken als ich das getestet hab, aber es geht.
  1. Update.Exe benennt meindienst.exe im laufenden Betrieb um in Meindienst_kannweg_2022_09_23_12_00.exe
  2. Update.Exe führt einen download der neuen Meindienst.exe durch und speichert sie anstelle der alten meindienst.exe
  3. Update.Exe initiert entweder einen Neustart des Dienstes oder es trägt einen Neustart des dienstes in den Taskscheduler von Windows ein oder man wartet bis der Dienst aus anderen Gründen neustartet.
  4. meindienst.exe löscht beim start Meindienst_kannweg_2022_09_23_12_00.exe
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (23. Sep 2022 um 10:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Programmupdate im Dienst - So möglich?

  Alt 23. Sep 2022, 11:27
Windows hängt das Handle der offenen Datei einfach beim Umbennen um
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#13

AW: Programmupdate im Dienst - So möglich?

  Alt 23. Sep 2022, 11:41
Windows hängt das Handle der offenen Datei einfach beim Umbennen um
ist auf jedefall, cool , denn es erlaubt Software Updates mit super wenig downtime.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#14

AW: Programmupdate im Dienst - So möglich?

  Alt 23. Sep 2022, 13:31
Es gibt garkeine offenen FileHandle auf die EXE.
Der Programmcode wird via MMF in den Speicher gemappt. (ein FileHandle gibt es nur kurz beim Programmstart)

Das Mapping auf den Dateiihnalt (Festplatte) arbeitet anders und daher wird das Umbenennen nicht behindert.
Nur das Löschen/Ändern geht so halt nicht, aber der Adressaufkleber (der Dateiname) kann geändert werden. (MMF hängt halt nicht am Pfad/Namen, sondern am Inhalt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Sep 2022 um 13:40 Uhr) Grund: weil verlaufen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Programmupdate im Dienst - So möglich?

  Alt 23. Sep 2022, 14:05
Windows hängt das Handle der offenen Datei einfach beim Umbennen um
ist auf jedefall, cool , denn es erlaubt Software Updates mit super wenig downtime.
Das funktioniert aber immer nur Semi-Stabil.

Den Trick versuchte ich immer wieder in den letzten "Jahrzehnten" zu nutzen, um Updates am Server trotz offener Anwendung auszutauschen.
Im einem Jahr ging es, im nächsten nicht mehr.
Ok. An einem Netzwerkshare ist es komplizierter da noch weitere Faktoren rein spielen könnten
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#16

AW: Programmupdate im Dienst - So möglich?

  Alt 23. Sep 2022, 16:13
Windows hängt das Handle der offenen Datei einfach beim Umbennen um
ist auf jedefall, cool , denn es erlaubt Software Updates mit super wenig downtime.
Das funktioniert aber immer nur Semi-Stabil.

Den Trick versuchte ich immer wieder in den letzten "Jahrzehnten" zu nutzen, um Updates am Server trotz offener Anwendung auszutauschen.
Im einem Jahr ging es, im nächsten nicht mehr.
Ok. An einem Netzwerkshare ist es komplizierter da noch weitere Faktoren rein spielen könnten
Naja Updates sind bei mir immer lokal und das Update wird von einem Dienst durchgeführt. Der Dienst ist immer aus. Wird nur für das Update gestartet und existiert wirklich nur um die Elevevated Rights aus der installation zu konservieren, so dass Updates immer mit Elevated Right durchegführt werden können.
Zudem setzte ich den SecurityDiscriptor(ACL) des Dienstes , bei der installation(ServiceAfterInstall) herunter, damit er von Anwendungen mit Userrechten gestartet werden kann.
Ich weiß nicht viel darüber, aber ich habe es mir (ein bisschen) von Chrome und (sehr viel)von Firefox abgeschaut.

Nutze im Moment diese ACLs für den Update Service...oder Elevation Service...
Delphi-Quellcode:
{//Alte ACL (SDDL )
  Permission := 'D:' +
  '(A;;CCLCSWRPWPDTLOCRRC;;;SY)' +        // default permissions for local system
  '(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)' + // default permissions for administrators
  '(A;;CCLCSWLOCRRC;;;AU)' +              // default permissions for authenticated users
  '(A;;CCLCSWRPWPDTLOCRRC;;;PU)' +        // default permissions for power users
  '(A;;CCDCLCSWRPWPDTLOCRSDRC;;;BU)'+      // Built IN Users
  '(A;;RP;;;IU)';                          // added permission: start service for interactive users
}

  Permission := 'D:' +
  '(A;;CCLCSWRPWPDTLOCRRC;;;SY)' + // default permissions for local system
  '(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)' + // default permissions for built-in administrators
  '(A;;CCLCSWRPLOCRRC;;;IU)'+ // permissions for interactively logged-on user von MozillaMaintainance und ChromeElevation
  '(A;;CCLCSWRPLOCRRC;;;SU)'+ // permissions for service logon user von MozillaMaintainance und ChromeElevation
  '(A;;CCDCLCSWRPWPDTLOCRSDRC;;;BU)'+ // permissions for built-in users
  '(A;;CCLCSWRPLOCRRC;;;AU)' + // default permissions for authenticated users
  '(A;;CCLCSWRPWPDTLOCRRCRP;;;PU)'; // default permissions for power users
Wenn die mal nicht mehr ausreichen passe ich die halt an.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (23. Sep 2022 um 16:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz