AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Programmupdate über Extraprogramm

Ein Thema von Nicolai1234 · begonnen am 23. Feb 2005 · letzter Beitrag vom 24. Feb 2005
Antwort Antwort
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#1

Programmupdate über Extraprogramm

  Alt 23. Feb 2005, 16:33
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') <> '0do
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
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Programmupdate über Extraprogramm

  Alt 23. Feb 2005, 16:37
Nimm mal Forms und QDialog aus der Unit Klausel
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Programmupdate über Extraprogramm

  Alt 23. Feb 2005, 16:37
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
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Programmupdate über Extraprogramm

  Alt 23. Feb 2005, 16:40
Zitat von franktron:
Nimm mal Forms und QDialog aus der Unit Klausel
Oh...
QDialog war noch drin, weil ich was mit showmessage überprüft habe.

Forms hingegen brauche ich, da er in dieser Zeile ShellExecute(Application.Handle, 'open' ,PChar(ini.readstring('URSPRUNG','P','0')), nil, nil, sw_ShowNormal); das Application sonst nicht kennt.

Oder gibt es dazu einer Alternative?
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Programmupdate über Extraprogramm

  Alt 23. Feb 2005, 16:45
Hi,
Zitat von Nicolai1605:
Oder gibt es dazu einer Alternative?
na klar. Du kannst entweder nil übergeben (sollte möglich sein) oder holst dir über die WinAPI das Handle des aktuellen Fensters. Da bin ich mir aber nicht sicher, wie das geht.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Programmupdate über Extraprogramm

  Alt 23. Feb 2005, 23:15
Tach...

Für intelligente Updates helfen dir vieleicht auch patch u. diff ... ich glaube für Windows bringt diese die MSYS Installation mit.
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Programmupdate über Extraprogramm

  Alt 24. Feb 2005, 14:03
Zitat von Chakotay1308:
Hi,
Zitat von Nicolai1605:
Oder gibt es dazu einer Alternative?
na klar. Du kannst entweder nil übergeben (sollte möglich sein) oder holst dir über die WinAPI das Handle des aktuellen Fensters. Da bin ich mir aber nicht sicher, wie das geht.

Chris
Also nil geht da nicht. habe ich gerade getestet. Was meinst du mit der API? Da kann ich mir ganricht drunter vorstellen
  Mit Zitat antworten Zitat
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#8

Re: Programmupdate über Extraprogramm

  Alt 24. Feb 2005, 14:37
ShellExecute(0,'open',PAnsiChar(ExtractFilePath(Paramstr(0))+'file.ext'),nil,nil,sw_show); geht problemlos in console apps.
warum willst du das handle uebergeben?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9

Re: Programmupdate über Extraprogramm

  Alt 24. Feb 2005, 15:58
Will er doch gar nicht. Chakotay schrieb:
Zitat:
Du kannst entweder nil übergeben
was aber nicht geht, weil der 1. Parameter von "ShellExecute" keinen Zeiger erwartet. Schäm dich, Chakotay! Deine Null, @beckmann, steht übrigens für das Desktop-Fenster.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:09 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