Delphi-PRAXiS

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)

Luki206 2. Dez 2013 17:42

Software Launcher/Update Prüfer
 
Hi,
ich habe vor, einen Launcher für eine Software zu schreiben. Ich habe auch schon einige Tutorials gesehen mit den Indy-Komponenten aber ich wurde daraus nicht schlau. 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..
Danke
Luki :)

Perlsau 2. Dez 2013 17:43

AW: Software Launcher/Update Prüfer
 
Und wie lautet jetzt deine Frage?

Luki206 2. Dez 2013 17:47

AW: Software Launcher/Update Prüfer
 
Frage: Wie kann man so eine Updateprüf Software schreiben?

Der schöne Günther 2. Dez 2013 17:48

AW: Software Launcher/Update Prüfer
 
Möchtest du wissen, wie man so etwas am besten angeht ("Gibt es einen besseren Weg als Datei auf FTP-Server? Was wenn der Server eines Tages nicht mehr erreichbar ist? ...") oder wissen, wie man einen bestimmten Teil deines Plans (FTP+Textdatei) umsetzt?

Luki206 2. Dez 2013 17:50

AW: Software Launcher/Update Prüfer
 
Wenn ich ehrlich bin, wären beide Varianten nicht verkehrt ;)

Perlsau 2. Dez 2013 18:01

AW: Software Launcher/Update Prüfer
 
Zitat:

Zitat von Luki206 (Beitrag 1238252)
Frage: Wie kann man so eine Updateprüf Software schreiben?

Also wenn man's kann, dann macht man das, indem man sie schreibt, Zeile für Zeile. Wenn man's nicht kann, dann kann man's auch nicht schreiben.

Zumindest ich verweigere den Dienst, wenn ein User gewissermaßen nach fertigem Code fragt, denn viel anders ließe sich das nicht beschreiben: Du verlangst eine Erklärung, wie man ein bestimmtes komplettes Projekt umsetzt. Wieso suchst du dir nicht einfach erstmal Aufgaben, denen du auch gewachsen bist?

Wenn man ein Projekt umzusetzen beabsichtigt, dann informiert man sich erst einmal: über die Forensuche und über die benötigen Komponenten, die man noch nicht kennt. Man übt sich erst mal im Gebrauch, macht ein Testprojekt, geht Tutorials durch usw. Erst dann geht man an die Umsetzung. Bei eintretenden Problemen bemüht man zuerst die Forensuche und fragt bei Mißerfolg im Forum nach, am besten mittels Posten der problematischen Codezeilen, die du noch gar nicht hast. So wie du das ständig machst, wird das nichts und erregt zudem den Unmut der anderen Forenteilnehmer, auch wenn viele das nicht so deutlich mitteilen, wie ich das tue.

Erst mal fragen, wie man denn dieses und jenes Programm schreibt, dann hoffen, daß jemand was fertiges liefert, das du dann natürlich nicht wirklich verstehst, weil dir die Grundlagen fehlen, und dann ellenlange Threads erzeugen, in denen man ständig nachfragen muß, was denn nun nicht funktioniert und an welcher Stelle usw. Ich kann es nicht ausstehen, wenn Leute wie du hier ständig ihre Bequemlichkeit zur Schau stellen, Ratschläge nicht befolgen bzw. nicht umsetzen, behaupten, es genau so gemacht zu haben, wie empfohlen, obwohl das gar nicht stimmt usw. Irgendwann hilft dir dann keiner mehr, wenn du so weitermachst ...

Luki206 2. Dez 2013 18:19

AW: Software Launcher/Update Prüfer
 
Schön das du so Leute wie mich nicht leiden kannst.. Wie so bitte antwortest du dann wenn es dir zu viel ist mal einen Ansatz von Hilfsbereitschaft zeigst? Hast mich schon im Delphi-Treff Forum blöd angemacht wo ich noch überhaupt nichts gekonnt hatte.. Ich hatte auch nur gefragt, wo ich Erklärungen finde und nicht gleich einen kompletten Code.. Du warst von Anfang an unfreundlich (mag sein das du ständig sowas lesen muss und es dich nervt aber du könntest trotzdem ein wenig freundlicher sein, wenigstens zu Anfängern) obwohl ich nie irgendwie unfreundlich war..

Der schöne Günther 2. Dez 2013 18:24

AW: Software Launcher/Update Prüfer
 
Die Worte kommen vielleicht etwas unglücklich an, ich formuliere es mal aus einer anderen Richtung:

Es wird sehr schwer und wenig effektiv werden, wenn wir versuchen, dir einen Software-Updater oder Teile daraus vorzuprogrammieren ohne zu wissen, was du davon verstehst, was du wie benutzen wirst, und warum etwas komischerweise nicht klappt.

Du hast doch schon eine Idee (mit dem FTP-Server), wie du es realisieren willst. Du hast einen super Spielplatz vor dir. Von Indy hast du auch schon gehört. Da wäre doch der erste Schritt: Sagen wir dem FTP-Server "Hallo".

Du sagst nur, dass du aus Tutorials "nicht schlau" geworden bist. Mich würde jetzt interessieren, was du versucht hast mit dem FTP-Server zu sprechen und was nicht ging.

Perlsau 2. Dez 2013 18:56

AW: Software Launcher/Update Prüfer
 
Zitat:

Zitat von Luki206 (Beitrag 1238259)
Schön das du so Leute wie mich nicht leiden kannst.. Wie so bitte antwortest du dann wenn es dir zu viel ist mal einen Ansatz von Hilfsbereitschaft zeigst? Hast mich schon im Delphi-Treff Forum blöd angemacht wo ich noch überhaupt nichts gekonnt hatte.. Ich hatte auch nur gefragt, wo ich Erklärungen finde und nicht gleich einen kompletten Code.. Du warst von Anfang an unfreundlich (mag sein das du ständig sowas lesen muss und es dich nervt aber du könntest trotzdem ein wenig freundlicher sein, wenigstens zu Anfängern) obwohl ich nie irgendwie unfreundlich war..

Du meinst also, meine Empfehlung, doch bitte erst einmal etwas Eigeninitiative an den Tag zu legen, bevor du nach kompletten Projekt-Konzepten fragst, basiere auf Unfreundlichkeit? Das ist definitiv nicht der Fall. Natürlich fühlst du dich dumm angemacht, wenn man dir sagt, daß du doch erst mal Grundlagen erlernen solltest, bevor du z.B. Fremdcode, den du nicht verstehst, einfach in dein Projekt kopierst und dich dann wunderst, wenn der Code nicht das macht, was du willst. Es basiert aber nicht auf Unfreundlichkeit, wenn ich dir sogar Code vortippe und du dann behauptest, du hättest es genau so gemacht und es ginge nicht. Das ist mit Verlaub nichts anderes als die Unwahrheit gepostet. Ist es das, was du unter Freundlichkeit verstehst? Wunderst du dich angesichts solcher Verhaltensweisen, wenn dein Gegenüber dann etwas schärfer formuliert?

Ich helfe gerne und auch wiederholt, wenn jemand ein Problem hat und ich mich damit auskenne. Entgegen deiner Behauptung hattest du in diesem Thread eben nicht danach gefragt, wo du Erklärungen findest, sondern wie man sowas programmiert. Deine jetzige Behauptung, du hättest danach gefragt, wo man Erklärungen findet, ist unwahr und stellt aus meiner Sicht ein unaufrichtiges Ausweichverhalten dar. Auch das ist nicht wirklich freundlich: Du glaubst nämlich, dein Gegenüber sei so blöde, daß er das nicht bemerken würde.

Was soll man denn darauf antworten, wenn jemand fragt, wie man ein ganzes Programm, von dem er nicht mal ein Konzept hat, entwickelt? Dir lang und breit auseinandersetzen, wie so ein Programm aufgebaut werden muß, worauf man achten muß usw.? Das käme einer kompletten Vortipperei gleich, auf die du ja allermeist abzuzielen scheinst, auch wenn du verständlicherweise das Gegenteil behauptest. Wenn man dir keinen Code vortippt, verstehst du meistens nur Bahnhof.

Auch habe ich nicht zum Ausdruck gebracht, wie du es darstellst, daß ich dich nicht leiden kann, sondern daß ich solche Vorgehensweisen, wie du sie ständig zeigst, nicht ausstehen kann, z.B.: Obwohl man dich – und nicht nur ich – immer wieder um aussagekräftige Fehlerbeschreibungen bittet, kommst du immer wieder mit "es geht nicht", "es funktioniert nicht", "geht nicht richtig" usw. In mir erweckt das den Eindruck einer gewissen Lernresistenz. Ist es in deinen Augen etwa unfreundlich, darauf hinzuweisen, daß ein "geht nicht" ungenügend ist, weil es nicht ausreicht, sich den Fehler vorzustellen? Wie kann man das dann trotzdem immer wieder so machen? Du mußt dir doch langsam selber ein wenig blöde vorkommen, wenn man dich ständig darauf hinweisen muß ...

Davon abgesehen helfe ich dir oder anderen nicht in der Absicht, mir Freunde oder mich beliebt zu machen, sondern aus simpler Hilfsbereitschaft, die meistens auf Gegenseitigkeit beruht, denn schließlich benötige ich ja auch hin & wieder Hilfe und Unterstützung. Ich bin nicht unfreundlich, sondern sachlich. Dagegen scheinst du überempfindlich zu sein: Du empfindest nur Leute als freundlich, die deine Bequemlichkeit unterstützen. Wer dir was Unangenehmes sagt, ist unfreundlich, auch wenn er es völlig sachlich rüberbringt. Oder ist es etwa keine Bequemlichkeit, ständig auf die Forensuche zu verzichten und Fragen, die schon zigmal gestellt und beantwortet wurden, wieder und wieder zu stellen? Geschieht es etwa nicht aus Bequemlichkeit, statt sich erst einmal selbst um Lösungen zu bemühen, gleich ganze Konzepte anzufragen, ohne zuvor auch nur den kleinen Finger gerührt zu haben? Noch während du mit der Lösung des einen Problems beschäftigt warst, hattest du schon die nächste Idee und fragtest, wie man sowas programmiert.

Kannst du auch nur im Ansatz nachvollziehen, was ich dir mitzuteilen versuche? Oder willst du weiterhin darauf beharren, daß ich das aus schierer Bosheit und Unfreundlichkeit schreibe? Wenn ich dir nicht helfen wollte, dann würde ich mir nicht die Mühe machen, das darfst du mir glauben.

Unser schöner Günter – keine Ahnung, ob er wirklich so schön ist – :lol: bringt dasselbe, was ich zu auszudrücken suche, auf den Punkt, nur mit anderen Worten. Ist das jetzt freundlicher? Es ist vielleicht weniger scharf formuliert, das mag schon sein, doch Schärfe in der Formulierung ist noch lange keine Unfreundlichkeit. Die wäre dann gegeben, wenn ich dich beschimpfen, als grundsätzlich unfähig, als zu blöde und dergleichen bezeichnen würde. Tue ich aber nicht, schon weil mir das nicht zustehen würde. Vielmehr benenne ich ganz sachlich – und engagiert – die Schwachpunkte deiner Vorgehensweise.

Und ja, du hast richtig vermutet: Ich und viele andere müssen ständig sowas lesen, du bist da leider nicht der einzige schwierige Fall :stupid:

Übrigens bin ich mir ziemlich sicher, daß du weder gegoogelt noch Tutorials gelesen hast – was in der kurzen Zeit zwischen dem Aufkommen der Idee und dem Posten der Anfrage ja auch kaum möglich gewesen wäre. Ich bin mir absolut sicher, daß du diese Suchergebnisse noch nicht mal gesehen, geschweige denn studiert hast. Vielmehr ist es bei bestimmten Usern längst zur Standard-Einleitung geworden, zu schreiben, man hätte ausführlich gegoogelt (wie Kinder die behaupten, auführlich Zähne geputzt zu haben) und das hätte alles nichts gebracht :)

Sir Rufo 2. Dez 2013 18:58

AW: Software Launcher/Update Prüfer
 
Mal in Grundzügen
  • Auf dem FTP-Server sollte (möglichst) unter der gleichen Adresse eine Info-Datei zum Programm stehen
  • In der Info-Datei befindet sich eine Information, anhand derer man ermitteln kann, ob aktualisiert werden muss (z.B. die Versionsnummer)
  • In der Info-Datei befindet sich auch der Link, wo die aktuelle Installationsdatei zu finden ist
Der Rest sollte nun klar sein.

Info-Datei laden und mit der installierten Version vergleichen.
Ist ein Update notwendig, dann die Installationsdatei laden und ausführen.

Es gibt da noch mehrere Spielarten, z.B. wenn für das Update auf die aktuellste Version Zwischenupdates gemacht werden müssen. Das packt man alles in die Info-Datei und reagiert entsprechend darauf.

Grundsätzlich haben wir hier also nur 2 wirkliche Schwierigkeitsgrade:
Dateien per FTP laden
Dateien ausführen

PS Ich weiß nicht wonach du gesucht hast, aber versuche es mal mit Bei Google suchendelphi ftp datei laden
Oh Wunder, der erste Link ist ein deutsches Tutorial mit der Indy-Komponente ;)

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.

d7user1 3. Dez 2013 14:06

AW: Software Launcher/Update Prüfer
 
A propos Verifizierung, 1000 Zeilen usw.


All das ist in den vielen Zeilen enthalten. Verifizierungen aller Art, um auf möglichst viele Probleme reagieren zu können.

verzeiht Schreibfehler. Ich poste mit dem Handy.

generic 4. Dez 2013 21:32

AW: Software Launcher/Update Prüfer
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab hier mal die Folien bzw. den Source von den DT2010.
Die Folien sind zwar ohne Moderation nicht so sprechend, geben aber vielleicht paar Themen-Ideen um welche du dich kümmern musst.

Vielleicht hilft es dir.

Links:
Versionsnummer


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 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-2025 by Thomas Breitkreuz