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:
[QUELLE]
P1=c:\test.txt
P2=c:\test3.txt
[ZIEL]
P1=c:\test2.txt
P2=c:\test4.txt
[URSPRUNG]
P=Mein Programm
Es soll immer von Quelle nach Ziel kopiert werden. Davor soll die alte Zieldatei gelöscht werden, danach die Quelldatei.
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...
)
Delphi-Quellcode:
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.
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.
Was könnte man ändern bzw. wie würdet ihr es machen? Das Grundprinzip sollte aber dabei gleich bleiben.
Danke