AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Programm aktualisieren (Codehilfe)
Thema durchsuchen
Ansicht
Themen-Optionen

Programm aktualisieren (Codehilfe)

Ein Thema von Bladefire · begonnen am 4. Jul 2014 · letzter Beitrag vom 7. Jul 2014
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Programm aktualisieren (Codehilfe)

  Alt 5. Jul 2014, 11:13
Ich möchte noch klarstellen, dass sich die exe von mir nicht (die gleiche datei) selber löscht, sondern die neu heruntergeladene löscht die alte datei.

Könnte es möglich sein, dass es bei mir probleme mit prozessnamen gibt, denn wenn ich ein Programm während der laufzeit unbennene so hat es noch immer den gleichen Prozessnamen.

Ich habe auch das gefühl das es hin und wieder das alte programm nicht löscht, weil es noch gelaufen ist während das neue Programm ausgeführt wurde.
Unter anderem aus diesen Gründen sollte man eine separate Update-Anwendung verwenden.

Nicht, dass das nicht auch so gehen würde, aber bei jedem Release muss man höllisch aufpassen, dass dieser Update-Code funktioniert. Und wofür? Weil der Code genau einmal zum Einsatz kommt? Dann doch lieber einen Updater der einmal gebaut und (bei jedem Update) immer wieder benutzt werden kann.

Kleines Beispiel:
Ändert sich z.B. der Mutex-Name (erkennen ob die alte Anwendung noch läuft), dann muss die neue Anwendung alle alten Mutex-Namen kennen sonst knallt es. Der Updater bekommt von der aktuellen Anwendung den Mutex-Namen mitgeteilt und kümmert sich entsprechend.

Bevor mir jetzt einer kommt "Ich benutze keinen Mutex" oder "Mein Mutex ändert sich nicht" - es ist nur ein Beispiel was mir jetzt adhoc mal eingefallen ist und aufzeigen soll, dass kleine Änderungen einen Rattenschwanz hinter sich herziehen können, die durch einen externen Updater wesentlich eleganter und einfacher gelöst werden können.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Programm aktualisieren (Codehilfe)

  Alt 5. Jul 2014, 12:31
Executables werden vom Windows ja wiederverwendet.
Das kennt man z.B. von DLLs, wo ja viele Programme die selben DLLs benutzten und es demnach natürlich praktisch ist, wenn die DLL dann nur einmal im physischem RAM liegt und dann nur noch bei all den Programmen in den virtuellen Arbeitsspeicher gemappt wird.
Und auf Seiten vom Windows sind EXE und DLL genau das Selbe.
Ach ja, dank Copy-On-Write stört es dann natürlich nicht, wenn Programme ihren Code patchen, da es nur auf die eigene DLL einen Einfluß hat und nicht auf alle Programme.

Nur ist natürlich nirgendwo dokumentiert wie Windows erkennt, ob es sich um die selbe EXE/DLL handelt, was man z.B. auch ganz einfach anhand des Dateinamens bestimmen könnte.


Und das Wann es eventuell nicht geht ... da kann es viele Gründe geben
- das Dateisystem
- Dateisystemtreiber
- Virenscanner und Co.
- andere Dateizugriffe
- Netzlaufwerke
- ...
- und letztendlich kommt das alles irgendwie darauf an WIE die Datei geöffnet ist.

Und dann ist es nunmal kein offiziell dokumentiertes und festgelegtes Verhalten,
was sich somit irgendwann auch wieder ändern könnte.

Billigstes Beispiel:
Delphi-Quellcode:
procedure TForm23.FormCreate(Sender: TObject);
begin
  TFileStream.Create(Application.ExeName, fmOpenRead or fmShareDenyNone);
end;

PS: Normaler Weise hat (sollte) ein einfaches "Benutzer"-Programm keine Rechte besitzen, um einfach so irgendwelche Programme zu ändern. (siehe Programme-Verzeichnis)
$2B or not $2B

Geändert von himitsu ( 5. Jul 2014 um 12:35 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

AW: Programm aktualisieren (Codehilfe)

  Alt 5. Jul 2014, 21:00
Ich werde vermutlich an diesem System festhalten und korregieren. Nichtsdestotrotz werde ich mir die vorschläge einer extra exe. (die man dann für sogut wie jedes Projekt leicht verändert verwenden kann) zu Herzen nehmen.
Nun, kannste so machen, klar. Aber die Zeit, die du damit verschwendest, an "diesem [fragwürdigen] System" festzuhalten und es auf Biegen und Brechen zu korrigieren, könntest du besser darin investieren, die hier bereits mehrfach empfohlene Updater-Anwendung zu programmieren. Denn darauf wirds früher oder später sowieso hinauslaufen, wenn du das Problem ordentlich und idiotensicher gelöst bekommen willst.

Und es ist ja nicht so, dass das Raketenwissenschaft ist. Du musst halt nur deinen Updater-Code, den du schon in deiner Form1 mitschleppst, in eine externe Anwendung auslagern und dich dann nur noch um den korrekten Ablauf kümmern (also Updater mit erhöhten Rechten (Adminrechten) starten, Hauptprogramm schließen, Update durchführen, Hauptprogramm neu starten (nur mit User-Rechten)).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Programm aktualisieren (Codehilfe)

  Alt 5. Jul 2014, 22:21
Man kann ja problemlos das Update im Hintergrund mit dem Programm runterladen und validieren. (machen viele Programme)

Aber das Installieren/Kopieren sollte etwas Anderes machen.
Das kann aber auch ein Script sein ... Batch (bat), Commandfile (cmd), PowerShell (ps), ...
$2B or not $2B
  Mit Zitat antworten Zitat
pelzig
(Gast)

n/a Beiträge
 
#15

AW: Programm aktualisieren (Codehilfe)

  Alt 5. Jul 2014, 22:55
Nur als Anregung

Mein upzudatendes Hauptprogramm (chef.exe) übergibt meiner updater.exe zwei Parameter:

"Pfad zu chef.exe" und die interne
Versionsnummer von chef.exe als String (z.B. "20131224" für letztes Jahr Weihnachten)

Updater.exe beendet chef.exe und ermittelt aus dem Pfad die URL für den Download des Updates und die URL für die aktuelle Versionsnummer:
http://www.myhomepage.demo/updates/chef.exe und
http://www.myhomepage.demo/updates/chef.txt

Der Inhalt von chef.txt wird mit dem zweiten Parameter verglichen und - je nach Ergebnis das Update heruntergeladen - chef.exe wieder gestartet.

Mit Delphi 7 PE und den Indies (IdHTTP unter Win 8.11 Pro) kein Hexenwerk, da Windows für updater.exe (aufgrund des Echsennamens) automatisch höhere Rechte einfordert.

Bei meinen Updates geht es immer um mehrere Dateien, die aktualisiert werden müssen, daher lädt mein updater.exe ZIP-Dateien herunter und entpackt sie anschließend in den Pfad von chef.exe.

TZip: http://www.angusj.com/delphi/

Allerdings hat mein chef.exe nichts mit Datenbanken zu tun - wie auch, mit Delphi 7 PE

MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Programm aktualisieren (Codehilfe)

  Alt 6. Jul 2014, 01:00
Delphi konnte doch schon immer mit Datenbanken umgehen?
Dank Fremdkomponenten auch in kleineren Versionen.

da Windows für updater.exe (aufgrund des Echsennamens) automatisch höhere Rechte einfordert.
Nein, das tut es nicht immer.
Und wenn es das tut, dann aus einem Grund: "Ohh, das ist ein Schrottprogramm, welches sich nicht an über 7 Jahre alte Regeln hält ... ich vermute mal, es ist ein Setup-Programm und gebe ihm, wenn ich Lust hab, vielleicht Adminrechte" (solange keiner auf die Idee kommt und diese Mustererkennung deaktiviert )

Langsam sollte man mal davon ausgehen, daß Programmierer endlich wissen was sie tun.
Und wenn es nach mir ginge, würde solche Mustererkennung langsam mal wieder ausgebaut.
$2B or not $2B

Geändert von himitsu ( 6. Jul 2014 um 01:17 Uhr)
  Mit Zitat antworten Zitat
Bladefire

Registriert seit: 30. Jun 2014
67 Beiträge
 
#17

AW: Programm aktualisieren (Codehilfe)

  Alt 7. Jul 2014, 16:35
Danke für eure Antworten und hilfen.

Ich habe mich nun doch dazu entschieden das problem mithilfe der update.exe zu lösen und es funktioniert alles bestens.

Lg Simon
  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 22:14 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