Autor Beitrag
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.05.10 10:51 
Das wird an Unicode liegen. Leider habe ich selbst nicht Delphi 2010, deshalb ist es nicht so einfach das zu testen (deshalb stehen auch als Delphiversion nur 2006 und 2007 dabei, eben wegen Unicode und ggf. Problemen damit).

Ich schau mal ob ich herausfinde woran das liegt. Ich werde einfach einmal die Trial ziehen und debuggen was da eigentlich passiert.

// EDIT:
Der Fehler tritt beim Beenden der alten Instanz auf, ich werde nachher noch eine aktualisierte Version veröffentlichen.

// EDIT2:
Hmm :gruebel:, ich muss da noch ein wenig testen, so auf Anhieb sehe ich das Problem nicht.
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 12.05.10 21:01 
Es gibt eine neue Version, jetzt mit recht flüssiger Fortschrittsanzeige, ein Bug bei der Abstimmung via IPC ist behoben, außerdem gibt es komplette Unterstützung der aktuellsten Indy Version (alte ab Version 10 gehen über einen Compilerschalter aber weiterhin auch). Diese Version veröffentliche ich als Beta 1, da diese soweit stabil läuft auf den angegebenen Plattformen und mit den angegebenen Delphiversionen.

Die Beta 2 wird dann alle geplanten Features wie eine Packfunktion und parallelisierte Downloads enthalten.

Leider konnte ich auch nach längerer Fehlersuche den Fehler unter Delphi 2010 nicht finden. Es funktioniert also derzeit mit Delphi 2009 und 2010 nicht. Ich kann nur vermuten, dass da irgendetwas am Speicher oder bei der Threadsynchronisation schief geht. Das untersuche ich noch, kann aber keine rasche Lösung in Aussicht stellen, da ich wirklich noch keine Idee habe was das Problem ist.

Was passiert: Die erste Instanz stürzt ab nachdem das Update eigentlich bereits durch ist. Beim Beenden gibt es dann eine Exception beim Aufräumen nach OnDestroy des Formulars. Zudem gibt es einen Zugriffsfehler bei den Updateroutinen, wenn diese bei Indy aktiviert sind, vermutlich beim Zugriff auf die Fortschrittsanzeige. Das lässt mich auf die genannten beiden Probleme als mögliche Ursache tippen.
Alois1
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 12.05.10 21:43 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Es funktioniert also derzeit mit Delphi 2009 und 2010 nicht.

Schade eigentlich. Ich habe mich auch schon versucht den Fehler zu finden... aber bei deinem Programm stosse ich leider an meine Grenzen.
Wäre toll wenn es eine Version für D2010 geben würde.

Ich sage trotzdem brav Danke für deine Bemühungen und deine tolle Arbeit bisher.

Gruss Alois ;)
PhilDelphiNew
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 07.06.10 14:45 
Hallo :)

Dein Update Programm ist wirklich sehr gut und einfach zu handhaben! In wenigen Minuten hatte ich mein erstes Update erstellt!

Leider habe ich einen Fehler festgestellt. Wenn ich nach dem ersten Update ein zweites Update erstelle (Erstes Update Versionsnummer 1.0, zweites Update 1.1) und anschließend den Updater starte, scheint zunächst alles zu funktionieren. Nur werden dann alle Dateien, bis auf die aus dem Update 1.1 gelöscht! Nur die alten Verzeichnisstrukturen bleiben erhalten!

Ich habe es mehrere Male getestet und auch im 2. Update probeweise die "createfolder" Befehle rausgenommen, geht aber trotzdem nicht.



So (ohne Createfolder-Befehle) ist meine Updatefilelist Struktur:

Update 1.0:
update;XXAutoupdater.exe;XXAutoupdater.exe
1.0;update;YYY/YYYY.YY;YYYY.YY

Update 1.1:
update;XXAutoupdater.exe;XXAutoupdater.exe
1.1;update;XXXXXX/XXXX.xx;XXXX.xx
1.0;update;YYY/YYYY.YY;YYYY.YY



Nach dem Update 1.1 ist dann also die YYYY.YY verschwunden: ,nur die XXXX.xx ist vorhanden. Der Updater nennt die alten Dateien in (.bak) und löscht sie dann... das programm behandelt die Dateien aus dem letzten Update als "alt" und löscht sie dann.


Geplant habe ich einen Updater, der egal auf welcher Version die Clients sind, immer auf die neueste Version updaten kann, ohne dabei alle Dateien neu runterzuladen!
So soll sich die Fileliste mit fortlaufender Versionsnummer immer erweitern und sowohl dem 1.0er als auch den 1.1, 1.2, 1.3ern etc. ein Update auf die neueste (zum Beispiel 1.5) ermöglichen!

Ist das umsetztbar mit diesem Updater? Ich denke eigentlich schon, nur funktioniert es nicht so, wie ich es probiert habe. Vielleicht ein Fehler im Programm?

Vielen vielen Dank für das tolle Programm und das Du es kostenlos online gestellt hast!

LG
Phil



////EDIT: Könnte man einstellen, dass nur die Dateien umbenannt werden, die in der Filelist aktueller sind, als die auf dem PC?

Hier der Code, ich glaube daraus zu lesen, dass alle Dateien aus der Filelist mit den Operatoren "update" und "delete" umbenannt werden.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
begin
  // All files to be deleted or updated have to be renamed before.
  for i := 0 to FDownloadFileList.Count - 1 do
  begin
    CurrentPath := FRootPath + FDownloadFileList.LocalPath[i];
    if (FDownloadFileList.Operation[i] in [upoDeleteFile, upoUpdateFile])  

<-------- HIER müsste dann eine Klausel stehen das nicht alle mit Operator UpdateFile umbenannt werden, sondern nur die Werte, die größer sind, als die Version auf dem PC --------->

      and FileExists(CurrentPath) then
      RenameFile(CurrentPath, CurrentPath + '.bak');
    SendMessage(FProgressMsgTarget, WM_UPDATEPROGRESS, 0,
      (i + 1) * 100 div FDownloadFileList.Count);
  end;
end;

Leider kann ich nicht programmieren. Könnte mir jemand helfen?? Vielen Dank :)

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 08.06.10 08:30 
Hallo und :welcome: hier im Forum ;-)

Danke für das Feedback, dort habe ich leider wirklich die Prüfung vergessen. Ich glaube das hier sollte das korrigieren, leider muss ich gleich zur Arbeit und kann es deshalb nicht gleich auch testen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TSJAutoUpdateStep1.RenameCurrentFiles();
var
  i: Integer;
  CurrentPath: string;
begin
  // All files to be deleted or updated have to be renamed before.
  for i := 0 to FDownloadFileList.Count - 1 do
  begin
    CurrentPath := FRootPath + FDownloadFileList.LocalPath[i];
    if (FDownloadFileList.Operation[i] in [upoDeleteFile, upoUpdateFile])
      and FileExists(CurrentPath)
      and ((CompareVersions(FCurrentVersion, FDownloadFileList.RenewVersion[i]) < 0)
        or (FDownloadFileList.RenewVersion[i] = 0))
 then
      RenameFile(CurrentPath, CurrentPath + '.bak');
    SendMessage(FProgressMsgTarget, WM_UPDATEPROGRESS, 0,
      (i + 1) * 100 div FDownloadFileList.Count);
  end;
end;
Das werde ich hoffentlich noch heute Abend auch selbst testen und dann eine neue Version damit hochladen. Aber ich poste es schon einmal, vielleicht ist damit ja schon einmal alles ok. Rein logisch sollte es so richtig sein: Die Datei wird nur noch gelöscht (bzw. hier dafür umbenannt), wenn die aktuelle Version kleiner als die in der Updatedatei angegebene ist oder dort keine angegeben ist und die Datei lokal überhaupt existiert.
PhilDelphiNew
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 08.06.10 15:13 
wow, vielen Dank für die schnelle Antwort und den neuen Code!
Nun klappt das Updaten richtig, es werden keine Dateien mehr gelöscht, die schon vorher im Programm waren. Klasse :)

Nur eine Kleinigkeit ist nun neu aufgetreten. Die Instanzen des Updater beenden sich nicht mehr nach dem Update und es kommt auch keine Meldung mehr, dass das Update erfolgreich verlaufen ist. Nach dem Update schließt sich das Programm, es bleibt aber noch im Taskmanager und somit können wohl die nächsten Schritte nicht eingeleitet werden. Am Ende habe ich dann 2 updater im Taskmanager laufen.

Das ist hoffentlich nur eine Kleinigkeit.

Nochmals vielen Dank für das tolle Programm und Deine Hilfe :)

LG
Phil
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 08.06.10 17:32 
Ich weiß woran das liegt. Und zwar nimmt das Programm die erste Backupdatei als Maß wann das Update durch ist. ich kann mich daran erinnern, dass ich glaube ich gar nicht teste ob die Datei existiert, sondern nur warte bis ich sie erfolgreich löschen konnte.

Und wenn da jetzt eben diese nicht zu aktualisierende Datei bzw. deren Backupdatei versucht wird zu löschen, dann geht das natürlich nicht. Weil es die gar nicht gibt. Da fehlt also noch die selbe Prüfung wie sie an der anderen Stelle ergänzt wurde. Das ist also "nur" eine Folge der anderen Änderung.

Da ich derzeit auf Arbeit bin (hab Pause :D) kann ich das nicht gleich anschauen, das mache ich dann heute Abend, ich komme gegen Mitternacht nach Hause. ;-)
PhilDelphiNew
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 08.06.10 23:30 
Oh Mensch, Du arbeitest aber lange! Ich dachte schon, wenn ich um 19Uhr zu Hause bin, dass ich spät dran bin :-D

Ich finde Deinen Updater klasse und wenn dieser kleine Fehler behoben ist, werde ich ihn auch ganz sicher einsetzen!
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 09.06.10 07:26 
Ich habe es jetzt auf mehreren PCs getestet (gestern habe ich nur gemerkt, dass es bei mir geht --> Testen kann dauern :D), aber das Problem konnte ich nicht reproduzieren. Welche Delphiversion und welches Betriebssystem ist das denn?

Passiert das nur mit deinem eigenen Programm oder auch mit meiner Demo? Ich habe mit der Demo deine Updateversionskonstellation versucht nachzustellen (1.4 ist die aktuelle, 1.6 und 1.0 haben die beiden Textdateien, die geladen werden), aber es klappt überall alles. :nixweiss:

Ich habe auf jeden Fall eine Version mit dem ersten Bugfix hochgeladen, der ist also auch bei der Downloadversion behoben.
PhilDelphiNew
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 09.06.10 15:52 
Ich benutze windows7 64 (ich habe integer und int64 in deinem Updater getauscht) und habe Delphi2007 (CodeGear™ Delphi® für Microsoft® Windows™ Version 11.0.2627.5503)

Als ich deine Beta2 runtergeladen habe und dann erneut meine Änderungen vorgenommen habe, haben sich die Programme nach dem Update dann auch richtig geschlossen und die .bak Dateien gelöscht.

Jetzt ist mir etwas anderes aufgefallen. Wenn ich mehrere (auch etwas größere Dateien bis zu 5MB) updaten lasse, werden einige Falsch umbenannt und so wird der Inhalt der "skin.tga" plötzlich in die "live.msh" getauscht. Die Dateieinamen bleiben jedoch korrekt, auch bleiben sie in der richtigen Verzeichnisstruktur. Das passiert sowohl mit der Beta1 als auch mit der Beta2.

Wenn das Problem nicht sofort erkennbar ist, schicke ich auch gerne ein Beispielupdate.

Eine andere, rein kosmetische, Sache ist der Fortschrittsbalken für das downloaden der Dateien. Ich habe rund 500 Dateien zum runterladen (im ersten Update), der Fortschrittsbalken ist jedoch schon nach den ersten paar Dateien bis 100% angestiegen und bewegt sich dann auch nicht mehr (logisch) bis alle Dateien runtergeladen sind.

LG
Phil
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 09.06.10 16:07 
Int64 und Integer sollte soweit ich mich erinnere auch durch eine Compilerdirektive direkt oben in der unit behoben werden können. Oder erinnere ich mich da falsch? :gruebel:

Das genannte Problem kann ich mirn erst einmal nru erklären, dass da in der Updatedatei selbst die Dateinamen falsch stehen. Ich hatte das Problem in meinen Tests bisher jedenfalls nicht. Und ich hatte auch beispielinhalte drin um zu sehen welche Dateien bei verschiedenen Versionen aktualisiert werden und welche nicht.

Ich schaue mir das dann heute Abend noch einmal an. Ein reproduzierbares Beispiel wäre da sehr hilfreich, das kannst du mir auch gerne per PN schicken, wenn du es hier nicht veröffentlichen möchtest.

Zum Fortschrittsbalken: Der ist noch nicht ideal, das stimmt, ich schaue es mir an.
PhilDelphiNew
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 11.06.10 20:39 
Achso, wie man etwas in der compilerdirektive veränder weiß ich nicht, ich habe die Werte einfach vertauscht ... nicht sehr schlau denke ich ;)

Zu dem Statusbalken: Könnte man einfach die Dateien in der filelist zählen lassen und den Fortschrittsbalken nach dieser Zahl wachsen lassen? Ich denke, dass das andere Programme auch so machen, z. B.: QSetup.

Ich habe das laue Gefühl, dass etwas mit meinen Einstellungen nicht so stimmt. Ich werde Delphi jetzt noch auf einen anderen PC installieren und neu starten. Wenns dann noch nicht klappt, poste ich hier ein Beispiel Update zum Reproduzieren.

Vielen Dank nochmals für die Hilfe bisher! :)

LG
Phil
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 11.06.10 21:05 
user profile iconPhilDelphiNew hat folgendes geschrieben Zum zitierten Posting springen:
Achso, wie man etwas in der compilerdirektive veränder weiß ich nicht, ich habe die Werte einfach vertauscht ... nicht sehr schlau denke ich ;)
ausblenden Delphi-Quelltext
1:
2:
{.$define IndyWithoutInt64}
{$message hint 'If you get the error Incompatible types: ''Int64'' and ''Integer'' then toggle this define!'}
Den Punkt weg und schon gilt die Direktive, setzt du ihn wieder ist das ein normaler Kommentar (wie jetzt).

Für diesen Beitrag haben gedankt: PhilDelphiNew
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 27.03.11 22:56 
user profile iconPhilDelphiNew hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt ist mir etwas anderes aufgefallen. Wenn ich mehrere (auch etwas größere Dateien bis zu 5MB) updaten lasse, werden einige Falsch umbenannt und so wird der Inhalt der "skin.tga" plötzlich in die "live.msh" getauscht. Die Dateieinamen bleiben jedoch korrekt, auch bleiben sie in der richtigen Verzeichnisstruktur.
Ich habe es nicht genauer getestet, aber ich denke ich habe das Problem mit der jetzt neuen Version behoben.