AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenes Programm elegant ersetzen

Ein Thema von Oreaden · begonnen am 11. Nov 2008 · letzter Beitrag vom 23. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
Oreaden

Registriert seit: 10. Nov 2008
60 Beiträge
 
#1

Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:25
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
  • Wie kann ich das laufende Programm elegant ersetzen?
  • Welche Probleme können auftreten und wie lassen sie sich umgehen (z. B. Sperreintrag des Programms, Schreibrechte im Verzeichnis)

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
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:31
Also das einfachste wäre wohl eine externe Datei die die orgigal Datei gegen die neue ersetzt.
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#3

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:37
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)
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:45
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).
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Oreaden

Registriert seit: 10. Nov 2008
60 Beiträge
 
#5

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:46
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
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:47
Zitat von joachimd:
Du kannst ein laufendes Programm zwar nicht ersetzen, wohl aber umbenennen.
Auch auf FAT-formatierten Laufwerken?
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:50
Zitat von nicodex:
Zitat von joachimd:
Du kannst ein laufendes Programm zwar nicht ersetzen, wohl aber umbenennen.
Auch auf FAT-formatierten Laufwerken?
zumindest auf NTFS...wer hat (außer auf externen Platten) noch FAT?
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 13:56
Das Ganze funktioniert auch mit FAT Dateisystemen und ist die Methode, die die meisten Applikationen nutzen heutzutage wenn es darum geht sich selbst upzudaten.
Fridolin Walther
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#9

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 14:04
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?
  Mit Zitat antworten Zitat
Oreaden

Registriert seit: 10. Nov 2008
60 Beiträge
 
#10

Re: Eigenes Programm elegant ersetzen

  Alt 11. Nov 2008, 14:06
Danke,

habe das mit dem umbenennen auf NTFS und FAT32 getestet und funktioniert einwandfrei . 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz