Zitat von
Oreaden:
daß nach dem Reboot die neue Programmversion verfügbar ist.
die neue programmversion ist bei mir schon nach einem neustart des progamms verfügbar.
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 von
Oreaden:
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.
kannst du ja machen. die instanz des programms im temp-dir wartet ja auf das programmende.
mußt es ja nicht sofort beenden.[/quote]
Zitat von
Oreaden:
Ist hierfür auch die ganze Geschichte mit den ThreadID's notwendig (wie kann man diese ermitteln)?
was meisnt du damit? wie gesagt, ich speichere die prozess-id der laufenden org. instanz.
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:
ini := TIniFile.Create(TempDir+'update.ini');
try
ini.WriteString(SECTION, 'OldFile', ParamStr(0));
ini.WriteInteger(SECTION, 'pid', GetCurrentProcessId);
finally
ini.free;
end;
in der 2. instanz lese und warte ich dann so:
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 von
Oreaden:
Auf der anderen Seite ist das Problem mit den ganzen Schreibrechten, wie kann man diese elegant beim Update handhaben?
ich weiß nicht genau was du meinst... welche schreibrechte?