Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Progamm Sich Selbst Ersetzen Lassen (https://www.delphipraxis.net/116799-progamm-sich-selbst-ersetzen-lassen.html)

Lucifer 6. Jul 2008 22:12


Progamm Sich Selbst Ersetzen Lassen
 
Hallo

Also ich habe einen Updater geschrieben und möchte nun wissen wie ich es am besten anstelle damit er sich selbst updatet.
In einer Rar auf meinem Root ist der geupdatete Updater.

Er soll den runterladen und entpacken (was er auch kann)
Nur kann er sich nicht selbst während dem Laufen ersetzen


Wie soll ich das anstellen?

Apollonius 6. Jul 2008 22:14

Re: Progamm Sich Selbst Ersetzen Lassen
 
Es gibt ein spezielles Flag im PE-Header, mit dem das gehen müsste. Ich habe es allerdings nicht getestet.

Der klassische Weg ist eine Batch-Datei, die die heruntergeladene Datei umbenennt, nachdem sich der Updater beendet hat.

mkinzler 6. Jul 2008 22:14

Re: Progamm Sich Selbst Ersetzen Lassen
 
Starte ein Hilfsprogramm, beende deine Exe und lass die Ersetzung vom Hilfsprogramm erledigen

Lucifer 6. Jul 2008 22:26

Re: Progamm Sich Selbst Ersetzen Lassen
 
Danke

Wie kann ich es soeinstellen dass man das Hilfeprogramm nicht selbst starten kann und nur von meinem Updater starten lässt?

mkinzler 6. Jul 2008 22:28

Re: Progamm Sich Selbst Ersetzen Lassen
 
In dem du es vom ihm ins Temp-Verzeichnis entpacken lässt.

dominikkv 6. Jul 2008 22:30

Re: Progamm Sich Selbst Ersetzen Lassen
 
Zitat:

Zitat von Lucifer
Danke

Wie kann ich es soeinstellen dass man das Hilfeprogramm nicht selbst starten kann und nur von meinem Updater starten lässt?

in dem du zB das Hilfsprogramm mit einem Parameter startest. Fehlt dieser Parameter kannst du ne Meldung rausbringen ("Updater kann nur über das Programm gestartet werden.") und den Updater beenden.

Lucifer 6. Jul 2008 22:34

Re: Progamm Sich Selbst Ersetzen Lassen
 
Hm Ich versteh jetzt beide Versuche nicht

Weder das mit dem Temp
Noch wie das mit dem Paramter aussehen muss

OldGrumpy 6. Jul 2008 22:35

Re: Progamm Sich Selbst Ersetzen Lassen
 
Geht noch simpler: Die gerade laufende Exe kann sich zwar nicht löschen (und damit auch nicht überschreiben), aber sie kann sich umbenennen. Stellt Dein Programm also fest, dass ein Update vorhanden ist, benennt es sich selbst in z.B. MeineExe.Bak um und lädt die neue Version herunter. Beim nächsten Programmstart wird dann automatisch die neue Exe gestartet.

Lucifer 6. Jul 2008 23:26

Re: Progamm Sich Selbst Ersetzen Lassen
 
Hab ein problem wnn ich es als Hilfsprogramm mache

Also als erstens schaut der Updater ob im Namen der Rar Updater enthalten ist.
Danach wenn ja bennent der Updater sich in Bak.exe

Er ladet die Datei runter und entpackt sie.
Darin ist die neue Updater.exe welche dann auch auftaucht.

Nach Entpacken startet er das Hilfsprogramm welches erstens Den Updater schliesst und danach die Datei Bak.exe löschen soll.
Nur bleibt die Bak.exe erhalten.
Wenn ich dann aber das Hilfsprogramm starte dann lsöcht er sie Aber...

Delphi-Quellcode:
if(temp='Updater')then
      begin
        RenameFile('Updater.exe','Bak.exe');
      end;


Runterladen...
Entpacken...

ShellExecute(Application.Handle, nil,'.\Updater_help.exe', nil, nil, SW_SHOWNORMAL);
Delphi-Quellcode:
PostMessage(FindWindow(nil,'.: Updater :.'), wm_close, 1, 1);
  DeleteFile('Bak.exe');
EDIT:

Hab einfach bisschen mit Sleep gearbeitet
Die runtergeladene Datei schien später aufzutauchen als das Hilfsprogramm startet.

Und zum Patchen hab Ich dann einfach die Neue Datei einfach anders gennant, dann hatt das HilfeProgramm den Updater geschlossen und gelöscht und danach die Neue Datei umbennant


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 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