![]() |
Programmupdate über Extraprogramm
Ich wollte in mein Programm eine Updatefunktion einbauen. Hierzu wollte ich über mein Hauptprogramm die neuen Dateien runterladen.
Dann soll das Hauptprogramm beendet werden, ein Konsolenprogramm aufgerufen werden, das die Dateien ersetzt, und dann wieder das Hauptprgramm geöffnet werden. Die Daten, was es kopieren und löschen soll, bekommt die Konsolenanwendung aus einer ini. So wie diese hier: Zitat:
Am Ende soll das Hauptprogramm wieder geöffnet werden. (der komplette Pfad steht unter URSPRUNG) Das ganze geht in der Praxis auch mit diesem Code: (Das Sleep kann man sich jetzt mal wegdenken, denn das ist nur da, damit das nicht alles so schnell geht... :wink: )
Delphi-Quellcode:
Das funktioniert soweit auch alles sehr gut, aber das Programm ist in dieser form leider 572KB groß. Ich wollte das eigentlich mit einem Konsolenprogramm machen, um es möglichst klein zu haben.
program Project1;
{$APPTYPE CONSOLE} uses SysUtils, idGlobal, inifiles, QDialogs, ShellAPI, forms, windows; var i: integer; ini: tinifile; begin writeln('Update wird abgeschlossen...'); sleep(50); writeln('INI wird geladen...'); ini := tinifile.create(ExtractFilePath(Paramstr(0))+'update.ini'); sleep(50); writeln('INI wird geladen... abgeschlossen'); sleep(50); writeln('Dateien werden kopiert...'); sleep(50); i := 1; while ini.ReadString('QUELLE','P'+inttostr(i),'0') <> '0' do begin writeln('Loeschen der Zieldatei... (' + inttostr(i) + ')'); deletefile(pchar(ini.ReadString('Ziel','P'+inttostr(i),'0'))); sleep(50); writeln('Kopieren der Datei...'); copyfileto(pchar(ini.ReadString('QUELLE','P'+inttostr(i),'0')), pchar(ini.ReadString('ZIEL','P'+inttostr(i),'0'))); sleep(50); writeln('.......................abgeschlossen'); writeln('Löschen der Datei...'); deletefile(pchar(ini.ReadString('QUELLE','P'+inttostr(i),'0'))); sleep(50); writeln('Löschung war erfolgreich'); inc(i); sleep(50); end; writeln('Update erfolgreich abgeschlossen...'); sleep(500); ShellExecute(Application.Handle, 'open' ,PChar(ini.readstring('URSPRUNG','P','0')), nil, nil, sw_ShowNormal); end. Was könnte man ändern bzw. wie würdet ihr es machen? Das Grundprinzip sollte aber dabei gleich bleiben. Danke |
Re: Programmupdate über Extraprogramm
Nimm mal Forms und QDialog aus der Unit Klausel
|
Re: Programmupdate über Extraprogramm
Hi,
erstmal die QDialogs rausnehmen, finde im Moment auch keinen Grund, warum du das brauchst. ;) Versuche dann noch alles aus der SysUtils rauszunehmen. Es gibt Alternativen für z.B. IntToStr. Also Alles in Allem versuchen die VCL loszuwerden. Dann sollte es kleiner werden. Chris |
Re: Programmupdate über Extraprogramm
Zitat:
QDialog war noch drin, weil ich was mit showmessage überprüft habe. Forms hingegen brauche ich, da er in dieser Zeile
Delphi-Quellcode:
das Application sonst nicht kennt.
ShellExecute(Application.Handle, 'open' ,PChar(ini.readstring('URSPRUNG','P','0')), nil, nil, sw_ShowNormal);
Oder gibt es dazu einer Alternative? |
Re: Programmupdate über Extraprogramm
Hi,
Zitat:
Chris |
Re: Programmupdate über Extraprogramm
Tach...
Für intelligente Updates helfen dir vieleicht auch patch u. diff ... ich glaube für Windows bringt diese die MSYS Installation mit. |
Re: Programmupdate über Extraprogramm
Zitat:
|
Re: Programmupdate über Extraprogramm
Delphi-Quellcode:
geht problemlos in console apps.
ShellExecute(0,'open',PAnsiChar(ExtractFilePath(Paramstr(0))+'file.ext'),nil,nil,sw_show);
warum willst du das handle uebergeben? |
Re: Programmupdate über Extraprogramm
Will er doch gar nicht. ;) Chakotay schrieb:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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