![]() |
Eigenes Programm elegant ersetzen
Hallo Wissende,
ich suche eine Möglichkeit, das eigene Programm elegant durch ein anderes (z. B. neue Version) zu ersetzen. Dabei stellen sich mir folgende Problempunkte
Danke für euere Hilfe. Verzeiht, daß ich einen neuen Thread eröffne, aber die bisherigen enthalten leider nicht die gewünschten Informationen damit ich ein eigenes Update im Programmlauf umsetzen kann. Schöne Grüße Oreaden |
Re: Eigenes Programm elegant ersetzen
Also das einfachste wäre wohl eine externe Datei die die orgigal Datei gegen die neue ersetzt.
|
Re: Eigenes Programm elegant ersetzen
hi
also ich hab mal ne update klasse fürn tool von mir geschrieben die das ganze in etwa so regelt: laufendes programm => neue dateien runterladen (temp dir) => ini-file in dem temp-dir erstellen in dem der pfad der installation steht und die aktuelle prozess-id => programm im temp-dir starten (mit speziellem parameter) => neu gestartetes programm wartet auf programmende des org. programms (kannst es hier auch killen). kannst in deinem prog ja ne meldung ausgeben "progamm muß neu gestartet werden" und dann beenden. => laufendes programm im temp-dir löscht die dateien im install-dir und kopiert sich selbst dort hin => start des neuen programms => löschen der temp dateien => temp-dateien die in benutzung sind (z.B. aktuell laufende exe) zum löschen beim nächsten reboot vormerken => programmende des progs im temp-dir für den user läuft das ganze eigentlich ziemlich unsichtbar ab (ausser die meldung mit dem update und dem programm neustart) |
Re: Eigenes Programm elegant ersetzen
Du kannst ein laufendes Programm zwar nicht ersetzen, wohl aber umbenennen.
-> neues herunterladen (zB als meineapp.v1.0.exe) -> bisheriges umbenennen (zB in meineapp.v0.9.exe) -> neues umbenennen (in meineapp.exe) Beim nächsten Programmstart startet dann die neue Version und du kannst auf die alte immer noch zugreifen (falls Update nicht gewünscht war oder Probleme macht). |
Re: Eigenes Programm elegant ersetzen
Hallo Nat,
das ganze hört sich ganz gut an. Stellte mir auch ungefähr so den Ablauf vor, daß nach dem Reboot die neue Programmversion verfügbar ist. Möchte aber nicht den User mit irgendwelchen Aufforderungen quälen, das Programm zu beenden, sondern einfach beim nächsten Programmstart die neue Version zur Verfügung stellen. Ist hierfür auch die ganze Geschichte mit den ThreadID's notwendig (wie kann man diese ermitteln)? Auf der anderen Seite ist das Problem mit den ganzen Schreibrechten, wie kann man diese elegant beim Update handhaben? Schöne Grüße Oreaden |
Re: Eigenes Programm elegant ersetzen
Zitat:
|
Re: Eigenes Programm elegant ersetzen
Zitat:
|
Re: Eigenes Programm elegant ersetzen
Das Ganze funktioniert auch mit FAT Dateisystemen und ist die Methode, die die meisten Applikationen nutzen heutzutage wenn es darum geht sich selbst upzudaten.
|
Re: Eigenes Programm elegant ersetzen
Zitat:
beim reboot wird quasi nur im temp-dir aufgeräumt (also alles was nicht sofort gelöscht werden konnte wird beim reboot gelöscht). Zitat:
mußt es ja nicht sofort beenden.[/quote] Zitat:
die 2. instanz (im temp dir) wartet dann solange bis der prozess beendet ist. speichern tue ich das ganze in der 1. instanz in etwa so:
Delphi-Quellcode:
in der 2. instanz lese und warte ich dann so:
ini := TIniFile.Create(TempDir+'update.ini');
try ini.WriteString(SECTION, 'OldFile', ParamStr(0)); ini.WriteInteger(SECTION, 'pid', GetCurrentProcessId); finally ini.free; end;
Delphi-Quellcode:
//alten dateinamen und prozess-id auslesen
ini := TIniFile.Create(IniFilename); try OldFile := ini.ReadString(SECTION, 'OldFile', ''); result := FileExists(OldFile); if not result then exit; pid := ini.ReadInteger(SECTION, 'pid', 0); result := pid > 0; if not result then exit; finally ini.free; end; //warten bis prozess beendet ist while ProcessExists(pid) do begin sleep(1000); Application.ProcessMessages; end; Zitat:
|
Re: Eigenes Programm elegant ersetzen
Danke,
habe das mit dem umbenennen auf NTFS und FAT32 getestet und funktioniert einwandfrei :angel: . Wie bekommt man das Problem mit dem Schreibschutz oder anderen Zicken (wie UAC, etc.) in den Griff? Schöne Grüße Oreaden So wie mit den Umbenennen hatte ich es mir vorgestellt :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz