AGB  ·  Datenschutz  ·  Impressum  







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

Software Launcher/Update Prüfer

Ein Thema von Luki206 · begonnen am 2. Dez 2013 · letzter Beitrag vom 4. Dez 2013
Antwort Antwort
Seite 2 von 3     12 3      
arnof

Registriert seit: 25. Apr 2013
1.252 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#11

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 19:58
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.
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#12

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 20:25
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..
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 20:30
Wenn du das temporäre Speichern noch raushaben möchtest, dann nimm statt eines FileStreams einen MemoryStream und befüllst die StringList mit LoadFromStream
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#14

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 20:38
@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
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#15

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 20:51
@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

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 und hochlobt 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.

Geändert von Perlsau ( 2. Dez 2013 um 21:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.221 Beiträge
 
Delphi 12 Athens
 
#16

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 20:57
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:

ich habe vor, einen Launcher für eine Software zu schreiben.
OK, das haben wir nun verstanden.

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?

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?

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Dez 2013 um 21:14 Uhr)
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#17

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 20:57
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.

Geändert von d7user1 ( 2. Dez 2013 um 21:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 22:35
@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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.221 Beiträge
 
Delphi 12 Athens
 
#19

AW: Software Launcher/Update Prüfer

  Alt 2. Dez 2013, 23:50
@d7user: Meinst du nicht, daß 1000 Zeilen ein bissl viel sind?
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Dez 2013 um 23:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#20

AW: Software Launcher/Update Prüfer

  Alt 3. Dez 2013, 00:25
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.
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:21 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