![]() |
Programm Update??
Ich stelle mir grad die Frage wie ich mein Programm am besten updaten kann..
es ist nicht groß.. das heißt es soll einfach immer komplett ersetzt werden! :) Dachte mir das ich auf meiner homepage die aktuelle Version abfrage, mit der "aktuellen" Vergleiche und bei einer differenz wird halt das neue heruntergeladen.. =) Soweit so gut.. alles kein problem ^^ Aber wie krieg ich nun mein Programm beendet, die heruntergeladene Datei umbenannt und wieder gestartet? ;) Krieg ich das in meinem Programm gehandelt? oder brauch ich ein kleines Update programm was ich dann aufrufen muss? |
Re: Programm Update??
Batch-Datei? :) Such doch einfach mal im Forum ...
|
Re: Programm Update??
ja, so etwas wollte ich vermeiden :P
aber fürs erste ist es wirklich eine idee.. :) |
Re: Programm Update??
Am Besten mit Hilfe einer Batchdatei. Diese starten, Programm beenden, Batch löscht/benennt alte Exe um und lädt neue herunter, ggf Batch löscht sich selber bevor sie sich beendet
|
Re: Programm Update??
Eine Möglichkeit bei einem kleineren Programm (bei größeren sollte es schon ein richtiger eigener Updater sein): Die eigene Exe ins Verzeichnis für temporäre Dateien kopieren, dort mit Adminrechten und den notwendigen Parametern fürs Updaten starten, dann die eigene Exe beenden.
Wenn dem Programm diese Parameter übergeben werden, dann aktualisiert es die Exe in das ursprüngliche Verzeichnis, benennt dann bei Erfolg die alte Exe um, nennt die neue Exe wie die alte und löscht dann die alte. Am Ende startet das Programm dann noch die neue Exe mit dem Parameter die temporäre Exe zu löschen und beendet sich selbst. Die neue Exe wartet auf die Beendigung und löscht dann die temporäre Exe, fertig. |
Re: Programm Update??
das problem sind da nur die Adminrechte..
Kann ich nicht sicherstellen.. dann werde ich es wohl mit einer Batch lösen, auch wenn mir das DOS-Fenster etwas stört.. ^^ aber es ist ja nur millisekunden da.. :) danke erstmal für die schnelle hilfe! ;) |
Re: Programm Update??
Die Batchdatei kannst du aber nicht mit Adminrechten starten und deshalb wird bei einem richtigen Programm, das unter c:\programme liegt, das nicht klappen (es sei denn man pfeift auf Sicherheit und arbeitet als Admin und unter Vista mit deaktivierter UAC, arbeitet also als Virensammler^^).
Wenn es sich natürlich um ein portables Programm ausschließlich für den USB-Stick handelt, dann brauchst du auch mit deinem Delphiprogramm keine Adminrechte. Dann reicht es die eigene Exe während sie läuft umzubenennen, die neue an die Stelle zu setzen und diese mit dem Parameter zum Löschen der umbenannten alten zu starten. Das wäre für ein normales Programm nicht für den USB-Stick aber Blödsinn, genauso wie eine Batchdatei. |
Re: Programm Update??
Man kann eine Batchdatei aber auch unsichtbar starten
|
Re: Programm Update??
Trotzdem kann man das was eine Batchdatei kann auch viel komfortabler mit Delphi selbst lösen. ;-)
|
Re: Programm Update??
Eine Exe kann sich halt nicht selber löschen, eine Batch schon
|
Re: Programm Update??
Hallo,
Korrektur: Eine Exe kann sich löschen. Schau dir mal bei CreateFile das Flag FILE_FLAG_DELETE_ON_CLOSE an. Öffnet man die Exe (SHARE) in sich selber mit diesem Flag, löscht das BS die Datei, nachdem alle File-Handles geschlossen sind (1. Handle - geöffnete Exe selber, 2, Handle - per CreateFile erzeugt). Bei MS gab es dazu mal ein (c++) Quellcode. ich finde ihn aber nicht mehr. Trotzdem klappt das natürlich nur, wenn auf die Exe eh Schreibrecht ist, also normalerweise nicht, wenn Sie im Programme-Verzeichnis liegt. Heiko |
Re: Programm Update??
Schaue Dir doch mal
![]() |
Re: Programm Update??
Liste der Anhänge anzeigen (Anzahl: 1)
Hi
ich habe hier mal einen kleinen Patch-Creator von ScherfgenSoftware hochgeladen (siehe Anhang). Das Ding ist OpenSource ... ich denke ich verstoße gegen keine Urheberrechtsgesetze. (Link zur Homepage: ![]() Wenn wer nicht mit diesem Upload einverstanden ist, soll sich bitte melden. Ich werde ihn dann wieder entfernen - ich will keinen Ärger. Aber sollte es eigentlich nicht geben. Ich habe das Tool selbst noch nie ausprobiert - soll aber funzen. Meine Idee wäre dann, dass dein Programm einen darauf hinweist, dass es eine neue Version gibt. (Wenn der Patch am Server gefunden wurde) Dann wird der Patch runter geladen, das Programm startet ihn und beendet sich dann. MFG FC ;) PS: Auf den Anhang achten! :D |
Re: Programm Update??
Zitat:
Die Exe benennt sich selbst um, die neue Exe wird so genannt wie die Exe vorher hieß und die neue Exe wird mit einem Parameter gestartet, der ihr sagt, dass sie die alte Version löschen soll. Fertig. Damit hast du im Grunde das selbe gemacht wie mit der Batchdatei... Das Problem sind eben die benötigten Rechte, weshalb die oben beschriebene umständlichere Vorgehensweise für echte Programme, die nicht nur für den USB-Stick sind, die einzige echte Alternative ist, wenn man keinen echten Updater benutzen will. |
Re: Programm Update??
Also mit dem Patch-Maker, den ich dir da geschickt habe, sollte es eigentlich keine Probleme geben ;)
Ich werde das morgen selbst mal probieren ;) Ich sag dann bescheid ob es den gewünschten Effekt hat ;) MFG FC ;) |
Re: Programm Update??
Zitat:
|
Re: Programm Update??
Ich hab kein Vista ... du :?
Wenn ja kann ich ja das Programm, was ich zum Testen mache, kurz uploaden und du versuchst es auszuführen. Ok? Das wäre nett. Mich interessiert es nämlich auch, ob das klappt. MFG FC ;) |
Re: Programm Update??
Zitat:
Und das ist ja auch normal, nur in der Standardinstallation ist man Administrator, und dementsprechend anfällig für Viren. In Firmen ist man das normalerweise sowieso und solange ich noch XP auf dem PC hatte, war ich auch als eingeschränkter Benutzer unterwegs. Ich habe XP zum Testen sowohl auf einem Testrechner als auch virtuell installiert (normal nutze ich ausschließlich Vista). Dafür gibt es Vista und XP kostenlos von Microsoft zum Download: ![]() Dieses Image kannst du dann in Virtual PC, das es ebenfalls kostenlos gibt, starten. Auch VirtualBox sollte gehen. Zitat:
|
Re: Programm Update??
Liste der Anhänge anzeigen (Anzahl: 1)
Hi
ich habe ja meinen Lösungsweg beschrieben und habe ihn auch heute getestet. Habe hier einfach mal ein kleines Versuchsprotokol angelegt. Test meiner Variante: Vorbereitung: Ich habe 2 Programme geschrieben. Beide Programme haben einen Button, der bei einem Klick, eine MessageBox mit der Versionsnummer ausgibt - entweder Version 1 oder 2. Das erste Programm hat außerdem noch einen Button mit der Caption "Update". Bei einem Klick auf diesen Button wird via ShellExecute der Patch gestartet. Den Patch habe ich mit dem Wizard, den ich gestern hochgeladen habe, erstellt. Ich habe nun im Verzeichniss "C:/Programme" einen Ordner namens "Test" erstellt. In diesem Ordner habe ich nun den Patch und das erste - das Grundprogramm - mit den 2 Button kopiert. Durchführung: Anschließend habe ich erst auf einem eingeschränkten Benutzerkonto einmal das Programm und den Patch in dem Verzeichniss "Test" und auf dem Desktop ausgeführt. Danach das selbe mit einem Benutzerkonto mit allen Rechten. Ergebniss: In dem eingeschränkten Benutzerkonto hat der Patchvorgang nur auf dem Desktop geklappt. Mit Adminrechten hatte ich jedoch kein Problem - alles hat wie erwartet einwandfrei funktioniert ;) MFG FC ;) PS: im anhang befindet sich die Grundanwendung und der Patch :) |
Re: Programm Update??
Delphi-Quellcode:
so habs ich in meiner BreakIt Version 1.3 gelöst. die procedure wird in FormCreat aufgerufen.
procedure download_neue_Version;
var fs: TFileStream; temp : String; begin temp := Main_Form.idHTTP1.Get('http:\\glotzer.gl.funpic.de/BreakIt/check_version.php?Version='+Version); if temp <> '' then begin if MessageDlg('Eine neue Version von BreakIt ist verfügbar, soll diese jetzt heruntergeladen werden?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin showMessage('Neue Version wird nach einem Klick auf OK heruntergeladen, dies kann einen Moment dauern.'); fs := TFilestream.Create(ExtractFilePath(Application.ExeName)+'Neue_Version.zip', fmcreate); Main_Form.IdHTTP1.Get('http:\\glotzer.gl.funpic.de/BreakIt/Version.php', fs); fs.free; showMessage('Neue Version liegt dort: '+ExtractFilePath(Application.ExeName)+'Neue_Version.zip'); showMessage('Das Programm wird jetzt beendet, bitte starten sie die neue Version.'); halt; end; end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 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-2025 by Thomas Breitkreuz