Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Software Launcher/Update Prüfer (https://www.delphipraxis.net/177864-software-launcher-update-pruefer.html)

arnof 2. Dez 2013 19:58

AW: Software Launcher/Update Prüfer
 
Also wenns schnell und einfach sein soll, dann kann ich das Empfehlen:

http://www.tmssoftware.com/site/wupdate.asp

Nur wenige Zeilen und es funktioniert. Der Prüft die Versionen deiner DLL , EXE , usw.

Luki206 2. Dez 2013 20:25

AW: Software Launcher/Update Prüfer
 
Ich habe es jetzt per HTTP gelöst:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    const vers = 2;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var stream: TFileStream;
sl : TStringList;
s, v: String;
begin
ForceDirectories('C:\ProgramData\Programm\Files');
Stream := TFileStream.Create('C:\ProgramData\Programm\Files\temp.crwd', fmCreate);
try
  IdHTTP1.Get('http://www.meinewebsite/update/software/update.txt', Stream);
  finally
   Stream.Free;
end;
sl :=TStringList.Create;
try
  sl.LoadFromFile('C:\ProgramData\Programm\Files\temp.crwd');
  s := sl.CommaText;
finally
   sl.Free;
end;
v := IntToStr(vers);
if s = v then begin
  MessageDlg('Die Software ist auf dem neuesten Stand', mtInformation, [mbOK], 0);
end else
MessageDlg('Neue Updates verfügbar!! Ihre Version: '+v+' '#10#13'Neue Verison: '+s, mtInformation, [mbOK], 0);
end;

end.
@Perlsau: Es tut mir leid das ich mich vorhin so aufgespielt hatte... Hast ja im großen und ganzen recht.. Das ist auch ein Problem von mir, wenn jemand ohne irgendwelche Smilys schreibt meine ich dann, er würde dann sofort aggressiv schreiben..

Sir Rufo 2. Dez 2013 20:30

AW: Software Launcher/Update Prüfer
 
Wenn du das temporäre Speichern noch raushaben möchtest, dann nimm statt eines FileStreams einen MemoryStream und befüllst die StringList mit LoadFromStream ;)

Dalai 2. Dez 2013 20:38

AW: Software Launcher/Update Prüfer
 
@Luki206: Bitte überdenke dringend deine Praxis, Pfade hart zu kodieren! Es gibt entsprechende Funktionen in der WinAPI, mit denen man die gewünschten Pfade ermitteln kann - auch passend je nach OS. Davon abgesehen: Wenn die Datei eh schon temp.* heißt, warum landet sie dann nicht gleich im %TEMP% (natürlich ermittelt mit der entsprechenden API-Funktion)?

MfG Dalai

Perlsau 2. Dez 2013 20:51

AW: Software Launcher/Update Prüfer
 
Zitat:

Zitat von Luki206 (Beitrag 1238272)
@Perlsau: Es tut mir leid das ich mich vorhin so aufgespielt hatte... Hast ja im großen und ganzen recht.. Das ist auch ein Problem von mir, wenn jemand ohne irgendwelche Smilys schreibt meine ich dann, er würde dann sofort aggressiv schreiben..

Okay, geht also doch :thumb:

Aber sag mal: wenn ich dich jetzt mit Beleidigungen überziehen und die mit vielen hübschen Smileys schmücken würde, wären das dann keine Beleidigungen mehr? Genauso ist es nicht automatisch Unfreundlichkeit oder Boshaftigkeit, wenn man nicht ständig mit Smileys um sich wirft.

Es geht hier ja auch nicht ums Smilen und miteinander fröhlich sein, sondern um Wissens- und Erfahrungsaustausch. Das findest du in Kuschelforen, wo man sich ständig gegenseitig einschleimt :P und hochlobt :drunken: und knuddel loveyou eiapopeia käselippe ...

Es mag dir vielleicht aggressiv vorkommen, wenn wiederholt dieselben Dinge angemahnt oder kritisiert werden; du fühlst dich in deiner Bequemlichkeit bedroht. Kenne ich gut. Aber schließlich bist du doch hier, um was zu lernen, oder etwa nicht? Das kann mitunter auch mal ganz schön anstrengend sein. Wir haben doch auf der Welt mehr als genug leistungslose Spitzeneinkommen (nein, die ALG-II-Bezieher meine ich damit gewiß nicht), da darf man eine solche Haltung doch nicht auch noch unterstützen. Doch bevor ich jetzt weiter abschweife: Wenn du was lernen wilslt, mußt du den Leuten, von denen du was lernen willst, auch die Möglichkeit geben, dir helfen zu können. Beim Abtippen und Kopieren lernst du jedenfalls nichts, das ist dir doch hoffentlich auch inzwischen klar geworden. Ebenso wie kein Arzt dir helfen kann, wenn du ihm einfach nur sagst, du funktionierst nicht mehr richtig, ohne genauer darauf hinzuweisen, was nicht funktioniert oder wo genau es dir wehtut, kann dir auch kein User helfen, wenn du immer nur schreibst, daß es nicht klappt, oder "funktioniert soweit, aber doch nicht so ganz" und dergleichen schwammige Aussagen. Immerhin kannst du dir jetzt vorstellen, daß das unheimlich nervt, was natürlich irgendwann dazu führt, daß man aufgibt und erst gar nicht mehr draufklickt, wenn dort Luki steht: "Ach der schon wieder, nee, das tu ich mir nicht mehr an, der blickt's eh nicht."

Man muß nicht wegen jeder Kleinigkeit im Forum nachfragen, das meiste kann man eigenständig – was man natürlich auch erst lernen muß, wenn man vorher diesbezüglich allzu verwöhnt war – herausfinden. Wenn du dir dann z.B. ein Tutorial über ein bestimmtes Thema vornimmst und du kommst nicht weiter, ist das was ganz anderes als sich hinzustellen und zu fragen: "Leute, sagt mir mal, wie programmiert man das? Am besten noch mit Konzept und kompletter Lösung." Genau so kommt das rüber. Andere bezahlen mich, damit ich ihnen das programmiere, da kannst du nicht erwarten, daß man dir das mal schnell runterprogrammiert, noch dazu mit allen Erklärungen, Hintergründen und Zusammenhängen usw.

Und bevor vielleicht der Verdacht entsteht, ich würde hier den Coolen spielen: Ich hab mich hier auch schon zum Narren germacht und mußte mich anschließend entschuldigen (bzw. empfand das dringende Bedürfnis, das zu tun) und ich hab das erstens wunderbar überlebt und mir zweitens keinen Zacken dabei abgebrochen. Das ist doch was ganz Natürliches und in zwischenmenschlichen Angelegenheiten völlig normal – oder sollte es zumindest sein.

Es ist auch keine Schande nachzufragen, wenn man bestimmte Empfehlungen und Hinweise nicht versteht. Vielen Anfängern ist das peinlich, die schreiben dann einfach: "Okay, habs rausgefunden, funktioniert jetzt" und man erfährt nie, wie sie denn das Problem jetzt gelöst haben. Die tun das, um sich die weiteren Ratschläge, die sie als schmerzvoll empfinden, weil sie sich dabei blöde vorkommen, zu vermeiden. So einfach ist das.

Ich hoffe, daß Admins und Moderatoren das jetzt nicht wieder als unnötig und off topic abmahnen, denn ich bin er Ansicht, daß solche Dinge nicht ganz unwichtig sind und ihre Erwähnung bei solchen Gelegenheiten durchaus angebracht ist. Es ist ja nicht so, daß ich der einzige bin, der das so sieht und empfindet, nur weil ich der einzige zu sein scheine, der das öffentlich thematisiert.

himitsu 2. Dez 2013 20:57

AW: Software Launcher/Update Prüfer
 
Wenn dich keiner leiden würde, dann würde keiner mehr antworten, aber Grundsätzlich solltest du dir auch erstmal mehr Gedanken über das machen, was du eigentlich willst.



Bin jetzt nur nochmal so von Anfang an ein paar deiner Fragen/Antworten durchgegangen:

Zitat:

Zitat von Luki206 (Beitrag 1238249)
ich habe vor, einen Launcher für eine Software zu schreiben.

OK, das haben wir nun verstanden.

Zitat:

Zitat von Luki206 (Beitrag 1238249)
Ich habe auch schon einige Tutorials gesehen mit den Indy-Komponenten aber ich wurde daraus nicht schlau.

Indy? Ich dachte du willst ein "Startprogramm" schreiben und keinen Downloader?

Zitat:

Zitat von Luki206 (Beitrag 1238249)
Die Software soll eigentlich nur den Inhalt einer .txt Datei auf einem FTP Server prüfen und dann sagen ob Updates verfügbar sind.
...
Googlen hat auch nichts gebracht..

Das glaub ich dir nicht, daß Google da nichts bringt.

Bei Google suchenDelphi Datei runterladen Bei Google suchenDelphi Datei mit Indy runterladen
Und, findet man da nun etwas?

Zitat:

Zitat von Luki206 (Beitrag 1238252)
Zitat:

Zitat von Perlsau (Beitrag 1238250)
Und wie lautet jetzt deine Frage?

Frage: Wie kann man so eine Updateprüf Software schreiben?

Also doch keinen Launcher.

Nja, im Grunde ist dein Problem erstmal, daß du deine Probleme scheinbar nicht trennen kannst.

- Datei runterladen
- runtergeladene Datei auslesen/auswerten
- Version der aktuellen Dateien bestimmen (z.B. Versionsinfo auslesen oder ganz einfach nur Änderungsdatum auslesen)
- neue Dateien runterladen (wurde nun schon in Punkt 1 gelöst)
- Dateien austauschen (was zwar bei der EXE, also vorallem sich selber etwas schwieriger ist, aber dafür gibt es auch einige Lösungen ... wenn man mal nach "Programm updaten" oder Dergleichen sucht)

Einzeln lassen sich diese Punkte bestimmt viel einfache lösen, als wenn man alles zusammen in einem Mischmasch nicht mehr durchblickt.

d7user1 2. Dez 2013 20:57

AW: Software Launcher/Update Prüfer
 
Zitat:

In der Info-Datei befindet sich auch der Link, wo die aktuelle Installationsdatei zu finden ist
in einer meiner softwareprodukte befindet sich auch eine sehr umfangreiche update-routine.

ich habe es auch mit einer sich auf einem ftp-server befindlichen datei gelöst in welcher nur die versionsnummer des neuen releases gespeichert ist.
in einer weiteren datei sind alle dateinamen der dateien gespeichert welche erneuert werden sollen. es werden also nur neuere oder fehlende dateien heruntergeladen.

Zitat:

- Dateien austauschen (was zwar bei der EXE, also vorallem sich selber etwas schwieriger ist, aber dafür gibt es auch einige Lösungen ... wenn man mal nach "Programm updaten" oder Dergleichen sucht)
installiert werden diese neuen dateien nach dem update bei mir von einem seperaten programm welches das hauptprogramm beendet und sich dann startet.

vorteil: kein umständliches setup und der user muss sich um nichts kümmern.
nachteil: sehr umfangreich vom code her und man muss alle möglichen fehler und eventuelle modifikationen des users mit einberechnen.

bezüglich umfangreich:
meine updateroutine hat ungefähr über den daumen etwas mehr als 1000 codezeilen.

Sir Rufo 2. Dez 2013 22:35

AW: Software Launcher/Update Prüfer
 
@d7user1

In der Programmierung arbeitet man (wenn man es richtig macht) mit Delegations.
(z.B. Owner bei TComponents, TObjectlist mit OwnsObjects, eine PrintKlasse, die eine bestimmte Instanz ausdruckt, ...)

Ändert sich etwas an der Daten-Klasse, dann passt man die Print-Klasse an und trotzdem bleibt der Aufruf gleich - schick.

Man kann sich gegen diese Delegations auch wehren und muss dann eine sehr aufwändige und umständliche Programmierung aufbringen, um eine Setup/Update-Routine zu haben, die auch zukünftige Szenarien abdeckt.

Oder man nimmt eine sehr einfache und simple Routine, die lediglich überprüft ob eine Aktualisierung vorliegt, und wenn, dann das Updatepaket liest und ausführt.
Diesem Updatepaket (joar ein Setup) ist es erheblich leichter beizubringen die alte Version auf den neuen Stand zu bringen. Man delegiert es eben.

Und ein Setup muss nicht umständlich sein, da man dieses auch silent (sichtbar ohne Benutzereingriff) oder very silent (gar nicht zu sehen) ausführen kann.

Und auch beim Setup können Dateien nachgeladen werden (wenn benötigt).

Somit kann man das gleiche Resultat erreichen, mit erheblich geringerem Aufwand und der Sicherheit auf jede mögliche Änderung reagieren zu können.

Jeder macht sich das Leben aber selber schwer, empfehlen würde ich deine Vorgehensweise aber nicht.

himitsu 2. Dez 2013 23:50

AW: Software Launcher/Update Prüfer
 
@d7user: Meinst du nicht, daß 1000 Zeilen ein bissl viel sind? :lol:
Delphi-Quellcode:
uses
  Math, IOUtils, ShellApi;

procedure TForm4.Button1Click(Sender: TObject);
const
  URL = 'http://example.com/application.exe';
var
  TempName, OldName, CurName: string;
  TempFile: TStream;
  Error: HINST;
begin
  CurName := Application.ExeName;
  OldName := CurName + '.old';
  TempName := TPath.GetTempFileName;
  IdHTTP1.Head(URL);
  if IdHTTP1.Response.LastModified <= TFile.GetLastWriteTime(CurName) then
    Exit; // lokale Datei ist neuer
  TempFile := TFileStream.Create(TempName, fmCreate);
  try
    IdHTTP1.Get(URL, TempFile);
  finally
    Free;
  end;
  if TFile.Exists(OldName) then
    TFile.Delete(OldName);
  TFile.Move(CurName, OldName);
  TFile.Move(TempName, CurName);
  Error := ShellExecute(Application.Handle, nil, PChar(CurName), nil, nil, SW_SHOW);
  if Error <= 32 then
    RaiseLastOSError(Error);
  Application.Terminate;
end;
Tja, und ab nun fangen die möglichen Probleme an.
- keine Verifizierung, z.B. ob die runtergeladene Datei defekt ist
- Schreibrechte? (ordentliche Anwendungen liegen in C:\Programme und da darf nicht jeder drin rumschreiben)
- Proxy? (Pech gehabt)
- es wird sich auf eine aktuelle Eigenart von lokalen Datenträgern verlassen, beim Austausch der Datei (mit Netzwerkpfaden geht es nicht)
- keine Prüfung ob alles korrekt ablief und auch kein Rollback bei Problemen, um ein Funktionierendes System nach dem Update zu haben
- kein Update/Konvertierung von irgendwelchen Dateienen, z.B. wenn sich in der neuen Version was ändert (die neue Version muß dann alle alten Daten ebenfalls verstehen = unnützer Anwendungscode, der nur einmal benötigt wird)
- usw.

sx2008 3. Dez 2013 00:25

AW: Software Launcher/Update Prüfer
 
Also mit wenigen Zeilen kann man Dateien von einem Webserver herunterladen:
Delphi-Quellcode:
uses ..., UrlMon;

function DownLoadInternetFile(const SourceUrl, DestFilename : String): Boolean;
const S_OK = 0;
begin
   Result := URLDownloadToFile(nil,PChar(SourceUrl),PChar(DestFilename),0,nil) = S_OK;
end;
Nachteile:
* Die Funktion blockiert während des Downloads
* kein Feedback während des Downloads (das liese sich aber noch mit einem IBindStatusCallback interface verbessern)
* läuft nur unter Windows
Vorteile
* extrem einfach und wenig Sourcecode
* benützt die Proxyeinstellungen der IE
* HTTPS funktioniert ebenfalls out of the box

Also ich würde mit dieser einfachen Methode beginnen und erst wenn der ganze Download & Update Prozess funktioniert auf eine andere Methode (z.B. Indy oder MSXML2 oder WinInet) umsteigen.

Noch ein Wort zu FTP:
Vergiss es einfach; das Protokoll hat gegenüber HTTP(S) zu viele Nachteile.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:11 Uhr.
Seite 2 von 3     12 3      

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