![]() |
Re: Eigenes Programm elegant ersetzen
also ich lade die neue datei in das verzeichnis der alten, diese datei hatt den namen meines programmes + '_update'
den rest mache ich mit ner batch datei
Delphi-Quellcode:
procedure UpdateClient(MainForm: TForm);
begin with TStringList.Create do try Add(':Label1'); Add('del "' + Paramstr(0) + '"'); Add('if Exist "' + Paramstr(0) + '" goto Label1'); Add('move "' + Paramstr(0) + '_update" "' + paramstr(0)+'"'); Add('start ' + ExtractFilename(Paramstr(0))); Add('del "' + ExtractFilePath(Paramstr(0)) + 'name.bat"'); SavetoFile(ExtractFilePath(Paramstr(0)) + 'name.bat'); finally Free end; //Ausführen ShellExecute(MainForm.Handle, 'open', PChar(ExtractFilePath(Paramstr(0)) + 'name.bat'), nil, nil, SW_HIDE); //Beenden MainForm.Close; end; |
Re: Eigenes Programm elegant ersetzen
Zitat:
Die Updateprozeduren müssen ausgelagert sein. Die Möglichkeiten dazu sind mannigfaltig. COM Server (wie es der Windows Explorer macht), Services (wie es die meisten Applikationen tun) oder aber sich selbst mit Admin Rechten neustarten fürs Update bzw. die Update Applikation mit Admin Rechten starten. |
Re: Eigenes Programm elegant ersetzen
Mhhhh, Schreibrechte? Kann man denn prüfen ob man die Rechte (falls ja, wie) hat, in ein Verzeichnis zu schreiben? Denke, dann wäre der Fall klar,
Delphi-Quellcode:
Denn in diesem Falle weiss der User am besten, wie man das Programm zum laufen bekommt, und da wäre es doch sehr aufwendig alle Optionen abzufangen, oder?
if Schreibrecht_im_Verzeichnis(paramstr(0)) then
Update_Programm else Offer_User_Download_Option; Habe den Vorschlag von SmallSmoker kurz geprüft, und es scheint ganz gut zu funktionieren :thumb:
Delphi-Quellcode:
Danke für Euere Tipps
procedure Restart_Programm;
var s: string; begin s := ChangeFileExt(paramstr(0), '_old.exe'); RenameFile(s, paramstr(0)); ShellExecute(0, 'Open', pWideChar(paramstr(0)), NIL, NIL, SW_NORMAL); close; end; Oreaden |
Re: Eigenes Programm elegant ersetzen
Hallo...
ein paar Denkanstöße... :P ich löse das Update bei meiner Anwendung wie folgt: - die Haupanwendung lädt eine INI mit den Versionsinformationen vom server im Internet via HTTP - ist eine neue Version vorhanden wird eine Update.exe downgeloadet, gestartet und die Hauptanwendung beendet. - die Update.exe übernimmt dann: - das Downloaden der Dateien, wobei bei allen Dateien ein Unterstrich angehängt wird, damit im Fehlerfalle die Originaldatei erhalten bleibt. - nach erfolgreichem Download das Umbenennen der Dateien - Anpassungen der Datenbank - Anpassen / Korrigieren von Ordnern bzw. Ordnerstrukturen - löschen von überflüssigen Dateien - was man sonst noch verändern will.... - letztendlich den Start der Hauptanwendung nach dem Update. - da die Update.exe je nach Bedarf programmiert / erweitert wird, ist man im Update recht flexibel. Vieleicht hilft es ja bei der Entscheidung... :hi: |
Re: Eigenes Programm elegant ersetzen
WoW haentschman, für das ganze denke ich daß wirklich ein eigener Updater nötig ist. Für die Routinen wo ich suche, handelt es sich um eine Exe. Dar Ansatz ist wirklich nicht schlecht, was ich mich frage, wie gehtst Du mit den Verzeichnissen um? Gehst Du immer davon aus, dass Du in das Verzeichnis schreiben darfst, prüfst Du das zuvor (Wie denn?) oder soll sich der User bei Bedarf darum kümmern?
Schönen Abend Oreaden |
Re: Eigenes Programm elegant ersetzen
also...
- die Anwendung ist im Programme Ordner - die Hauptanwendung lädt die Update.exe ins gleiche Verzeichnis - unter XP sollten Schreibrechte im Installationsverzeichnis der Hauptanwndung möglich sein - unter Vista fordert die Update.exe Adminrechte an, die der User bestätigen muß. - alle anderen Dateien liegen im AllUsers bzw. im Benutzerverzeichnis :wink: so richtig glücklich bin ich mit der Adminrechteanforderung noch nicht. Ich werde mal abwarten, wie sich das ganze auf den unterschiedlichsten Systemen verhält. ...Probleme sind da um Lösungen zu finden 8) PS: wenn es sich nur um eine exe handelt sind weiter oben wesentlich einfachere Varianten aufgelistet...da wäre diese Variante mit Kanonen auf Spatzen geschossen. :hi: [edit] - so eine Update.exe ist eigentlich schnell zusammengestrickt, welche die Anwendung beendet, die exe downloadet und dann wieder startet. Vorteile zur Batch Datei: Visuell schööön machbar. (Ladebalken etc.) [/edit] |
Re: Eigenes Programm elegant ersetzen
|
Re: Eigenes Programm elegant ersetzen
Hm, wenn Deine Anwendung wirklich nur aus einer Datei besteht und Du da nicht exzessiv rumdoktorn willst, dann wäre es am einfachsten Du checkst nach dem Vorhandensein eines Updates und überprüfst dann ob Du Admin Rechte hast. Falls nicht, forderst Du diese an (indem Du Dich selbst mit Administratorrechten neu startest z.B.) bzw. bittest den User Dich als Admin zu starten. Falls Du Admin Rechte hast, kannst Du die Datei direkt ersetzen.
Zu überprüfen ob Du in einem Verzeichnis Schreibrechte hast oder nicht wäre für mich als Pragmatiker relativ einfach: Ich probier in dem Verzeichnis was zu schreiben*. Wenns klappt, prima. Wenns nicht klappt, hab ich offensichtlich keine Rechte dazu. Da der Administrator aber ohnehin immer Rechte hat (bzw. sie sich besorgen kann), wäre so ein expliziter Check eher nicht notwendig, sofern der Update Code an sich korrektes Fehlerhandling betreibt. * Das Ganze stimmt so nicht ganz. Windows Vista führt bei aktivierter UAC für sogenannte "Legacy Applications" Dateisystemvirtualisierung durch. Das bedeutet das wenn eine Legacy Application versucht im Programme Ordner zu schreiben, werden die Dateioperationen stattdessen in einen Ordner im Userprofil durchgeführt. Der Check funktioniert bei "Legacy Applications" also nicht. Legacy Applications sind dabei 32bit Anwendungen ohne Manifest bzw. Anwendungen die in der Compatibility Database von Vista explizit als Legacy markiert sind. |
Re: Eigenes Programm elegant ersetzen
Ich löse dass so:
Datei laden datei mit suffix "_new_" versehen Datei UPADATE.INI erstellen in der alten Version schauen ob die datei da ist und wenn ja,dem User schon wieder :) mitteilen Im neuen Programm das alte löschen uns sich durch ein drittes Programm ummbenennen Wenn in der update.ini etwas besonderes steht(surch das 3. Programn),das dritte Programm löschen Fertig :bounce1: :coder: :cheers: :coder2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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