was auch toll wäre wenn man zu einem datei update auch eine msi datei ausführen könnte ... also erst die daten updaten und dann eventuell etwas neues hinzuinstallieren oder bestimmte komponennten registireren dann müsste man nicht das ganze msi paket ziehen ....
Du kannst die MSI ja dem Update beipacken, und hinterher ausführen lassen nach dem Update. Das geht ja bereits!
stimmt ... 🙂
Gehe ich recht in der Annahme das es dieses Jahr mit dem Update nichts mehr wird? 😉
Also wünsche ich allseits einen guten Rutsch ins neue Jahr und das die neue gefixte Version bald erscheint 8)
Da hast du leider recht.
Hatte über die Feiertage keine Zeit, da ich nicht zu Hause war und ab morgen bin ich bis zum 1. Januar auch wieder weg. Aber nächste Woche gehts dann endlcih wieder weiter.
Naja, so ab und zu muss man auch mal eine schöpferische Pause einlegen bzw. die Sau raus lassen 😁
In diesem Sinne feiert schön und den Kater am besten im Vorfeld schon mit 2 Aspirin vertreiben :evil:
Also mal ehrlich, das Teil ist ja der Oberhammer! Und dass dann auch noch nicht-kostenpflichtig! Das ist mindestens ein dickes "Dankeschön" in einer datei fällig 🙂
👍
Unglaublich, ich wollte sowas schon mal selber schreiben, habs dann doch nicht geschafft weils mir wegen FTP etc. zu komlex war (und so toll hätt' ichs nicht hingekriegt) 🙂
Super arbeit EvilMM!
Aber noch eine Frage, ich hatte jetzt nur Zeit die ersten paar Posts zu lesen, wie ist dass wenn ich z.B. folgende Situation hab, dass ein paar dateien auf dem Server liegen, z.B.
"Update_0000.zip"
"Update_0001.zip"
"Update_0004.zip"
"Update_0005.zip"
Wie macht das der Updater dass wenn ich keines von den Updates hab? Läd der dann alle 4 nacheinander runter und entpackt die dann? Oder wie geht das?
Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen
Wie macht das der Updater dass wenn ich keines von den Updates hab? Läd der dann alle 4 nacheinander runter und entpackt die dann? Oder wie geht das?
Ich erlaube mir hier mal im Namen von EvilMM zu antworten:
Auf dem Server liegt noch eine Kontrolldatei (version.xml) mit den vorhandenen Versionen. Und aus deinem C# Code heraus muss du die aktuell installierte Version angeben (Doku lesen, da steht alles drin). Die aktuelle Version wird mit den verfügbaren Versionen verglichen, und es wird von allen neuen Versionen zur Zeit die älteste installiert.
Bsp:
Du hast Version 1.2 installiert. Auf dem Updateserver liegen Version 1.1, 1.2, 1.3, 1.4.
Dann wird in dem Beispiel Version 1.3 installiert.
Führt dann die Programmversion 1.3 wieder ein UpdateCheck durch, so wird schliesslich 1.4 installiert.
Sollte man nicht immer auf die neuste Version updaten können, ich mein welcher User geht schon davon aus, das wenn er ein update ausführt, es gleich danach nochmal,... ausführen zu muss, wenn er die neuste Version nutzen möchte?
das wurde schon mal auf seinem
> besprochen.. dort siehst auch gründe, warum es eben nicht so gemacht wird 🙂
Kenne ich nicht, danke, aber mir ist schon klar warum das hier und da nicht gehen kann, je nach Konzept des Updaters (ich beschäftige mich ja auch mit so etwas). Dennoch kann man nicht davon ausgehen das der User bzw. der Enduser das versteht. Welcher normale User würde so ein Updater schon mehrmals hintereinander ausführen, da kommt doch keiner drauf. Zumindest sollte es dann eine Info oder so geben, damit er das in jenem falle eben macht 😉.
Hallo,
klar ist es ansichtsache.. ich würde mir auch wünschen.. dass man per Flag komplett auf das aktuelle Updaten kann.. Vorrausetzung hierfür ist natürlich, dass ein komplettes Paket vorhanden ist.. So weit ich das gesehen habe, werden sich ja nur Änderungen gemerkt.. aber das ist Sache vom Entickler ob er sowas in der Art einbaut.. Und noch ist das Tool ja jung 🙂
Weiters müßten sich alle MS User fragen.. den ich hatte schon öfter Updates von einem Update.. Also müßten es die MS User gewöhnt sein 🙂
lg Lion
lg Lion
Weiters müßten sich alle MS User fragen.. den ich hatte schon öfter Updates von einem Update.. Also müßten es die MS User gewöhnt sein 🙂
Ist ja auch nicht so oft hust
Wie gesagt, man müsste eine Info bekommen, da eben sicher die wenigsten von alleine darauf kommen werden. Beim Norten (Beispiel) LiveUpdater gab es auch ab und an mal so eine Meldung, wo man darauf hingewiesen wurde LiveUpdate nochmal auszuführen, da das gerade gemachte Update weitere Updates nach sich ziehen könnte.
Also es ist doch nach wie vor schon möglich immer auf die aktuelleste Version zu aktualisieren. Ihr habt doch bei der Erzeugung eines Updatepaketes drei Auswahlmöglichkeiten:
Wenn ihr auf inkrementelles Updaten verzichtet und in das aktuellste Updatepaket alle Dateien reinpackt und dann wählt "für alle früheren Versionen" wird immer auf die aktuelleste Version aktualisiert.
Das andere betrifft einzig und alleine inkrementelle Updates. Dort ist ein automatisches Laden aller Updatepakete noch nicht möglich.
Wenn ihr auf inkrementelles Updaten verzichtet und in das aktuellste Updatepaket alle Dateien reinpackt und dann wählt "für alle früheren Versionen" wird immer auf die aktuelleste Version aktualisiert.
Also wenn dem so ist, dann ist aber noch irgendwo ein Käfer verborgen. Ich werd das mal morgen bei der Arbeit prüfen, aber ich könnt schwören, dass ich die Updates genau so eingestellt habe: "für alle früheren Versionen". Und wenn ich ein Setup erstmalig auf einem Rechner neu aufspiele, dann werden schön sequentiell die Updates (mittlerweilen 3) eingespielt. Ich prüfe das direkt beim Programmstart, spiele die updates ein, und die Anwendung wird neu gestartet. Das Spielchen wiederholt sich dann 3 mal bis alle Update drauf sind.
Das könnte dann der Fall sein, wenn du mehrere Updates mit "für alle Versionen" angelegt hast.
Wenn du also hast:
Update 1: v1.3.0 für alle Versionen
Update 2: v1.4.0 für alle Versionen
Update 3: v1.5.0 für alle Versionen
dann wird er vermutlich erst die 1.3.0 ziehen. In diesem Falle müsstest du alle Updates bis auf das aktuellste wieder rauslöschen. Der Updater findet mehrere mögliche Updatepakete bei der Suche, nämlich die oben drei genannten und lädt dann immer das erste.
Leider gibt es noch für keinen Modus die Möglichkeit, dass der Updater erkennt wenn noch weitere Updatepakete vorhanden sind oder in diesem Falle aktuellere.
Steht aber auf der ToDo. Aber versuche mal für diesen Fall alle älteren Updatepakete einfach wieder rauszulöschen, dann sollte es funktionieren.
Genau so ist es 🙂
Ich wusste, dass du da ja noch was auf der Todo hattest, deshalb hat deine Aussage vorhin mich doch etwas verwundert... Klar, wenn ich die Zwischenupdates rauslösche, dass dann natürlich nur das letzte Update eingespielt wird. Nur muss ich dann darauf achten, dass das letzte Update aber auch alle Änderungen beinhaltet seit dem ersten Release, weil sonst gehts in die Hose... Stellt aber eigentlich kein Problem dar.
Wichtiger für mich ist immer noch die Sache mit der Impersonifkation beim Einspielen des Updates 8)
Genau, wenn man inkrementelle Updates macht bleiben natürlich alles Updates auf dem Server.
Möchte man derzeit immer ein vollständiges Update anbieten sollten alle vorherigen Updates wieder entfernt werden.
Ich arbeite aber auch noch an einem Testbereich, in dem man vorher schonmal das Verhalten testen kann. Sprich: welches Updatepaket würde bei welcher Version gezogen werden.
An der Impersonifikation sitze ich gerade. Das möchte ich auch noch in die nächste Version bringen.
Sprich: welches Updatepaket würde bei welcher Version gezogen werden.
Das ist Klasse. Nur so als Tipp: ich würde für jede einzelne Version jeder Datei im Update Zip eine CRC32 Prüfsumme hinterlegen. Somit hast du relativ leicht die Evoluierung der nötigen Dateien die beim Einspielen eines Updates nötig sind. Wenn z.B. von v.1.0 auf v.1.5 geupdatet wird, und alle Zwischenversionen gleich mit in einem Ruck, so reicht es aus, über die Prüfsumme nur die Dateien herauszufiltern, welche unterschiedlich zu den installierten Versionen sind. Dann jeweils die letzte Datei updaten und es sollte klappen. Aber da müssten wohl noch ein paar andere Szenarien durchgespielt werden.
An der Impersonifikation sitze ich gerade. Das möchte ich auch noch in die nächste Version bringen.
Das wäre klasse. Wenn Du da noch ein paar Ideen brauchst, dann sag Bescheid. 2 Klassen hab ich dir ja schon diesbezüglich gemailt. Und 4 Hinrhälften arbeiten bekanntlich besser als nur 2 😁
Genau, die Dateien habe ich bekommen. Bei Problemen und vor allem zum Testen wende ich mich dann gerne an dich.
frage ...
wird in der nächsten version das löschen von dateien enthalten sein ?
In der nächsten wohl noch nicht, ist für die übernächste geplant. Was mir an der Stelle aber helfen würde ist wie ihr bzw. du dir das genau vorstellst. Ich könnte das so aufbereiten wie in der Ansicht in der man die Dateien für das Updatepaket zusammenstellt.
Falls ihr / du konkrete Ideen und Vorstellungen habt, so lasst es mich wissen.
Die Änderungen für die nächste Version sind jetzt alle gemacht.
Diese umfassen:
*Den zu startenden Tasks können bis zu 4 Parameter mitgegeben werden
*FTP-Verbindungsverwaltung
*MySQL-Verbindungsverwaltung
*FTP-Server-Port frei wählbar
*Geänderte Oberfläche der Updatevorbereitung
*Hauptanwendung wird nun korrekt beendet und nicht nur abgeschossen
*Probleme beim Vorbereiten des Updates behoben
Die Planungen für die übernächste Version sehen dan so aus:
*Impersonifikation -> Benutzerwechsel für Updates
*Eingabekontrolle bei Updatepaket-Erzeugung
*Löschen von Dateien während des Updates
Die nächste Version (1.2) werde ich heute und morgen erstmal noch einigen Testes unterziehen und dann veröffentlichen.
Nutzt bitte weiterhin fleißig den Bugtracker. So geht nie etwas verloren.
zum löschen
die update exe wird ja mit ins programmverzeichnis gespielt ?
einfach die zu löschenden daten + eventuelle unterordner in die xml datei mit einbinden dann mit
// using System.Reflection;
// using System.IO;
public static string ApplicationPath
{
get
{
return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
}
den programmpfad rausholen und dann einfach ein FileInfo Object erstellen
prüfen ob das file existiert wenn ja dann löschen
so in etwa hätt ich mir das vorgestellt
ich kann dir auch gerne eine klasse dazu zusammen schreiben damit wir das update schneller bekommen
müsstest dann nur für die xml datei sorgen wo die ganzen pfade bzw dateinamen drinnen stehen ...?
Hi,
nein um die technische Umsetzung gehts mir nicht 🙂
Die Frage war vielmehr ob es bestimmte Vorstellnugen gibt wie das in der Admin-Oberfläche aussehen soll. Vllt fallen dir direkt ein paar Optionen ein die einstellbar sein sollen.
Also Anwendungspfad ish nicht umbedingt gleich Pfad von K_Update.dll!
Bei mir ist die dll und die assembly die es ausführt zwei unterordner drunteer!
Also vielleicht in den K_Settings den application Path zum angeben machen - sonst eben die oben genannte sache.
"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger Dijkstra
Hallo,
bezüglich dem löschen glaube ich, wäre es am einfachsten, wenn man das bei einem Update Paket einstellen könnte. "Alle Files davor löschen" oder ähnliches, oder eine List mit zulöschenden Dateien.
Kommt drauf an welche Updates gemacht werde, wird ein komplettes gemacht, so kann ja das Verzeichniss vorher "gesäubert" werden.
lg Lion
lg Lion
Gab es bzgl. dem Anwendungspfad schon Probleme?
Mmh ok das muss ich mir mal überlegen wie ich das mache. Auf jeden Fall ganz klar über eine Liste von Dateinamen die dann gelöscht werden.
Den ganzen Ordner säubern halte ich zwar etwas für gefährlich, aber es ist natürlich umsetzbar 🙂
Also Anwendungspfad ish nicht umbedingt gleich Pfad von K_Update.dll!
Bei mir ist die dll und die assembly die es ausführt zwei unterordner drunteer!
Also vielleicht in den K_Settings den application Path zum angeben machen - sonst eben die oben genannte sache.
das update wird ja von der update.exe ausgeführt die heruntergeladen wird ?
dort sollte die methode mit dem programmpfad eingefügt werden
oder habe ich da irgendwas falsch verstanden
den programmpfad beim admin mitgeben geht ja nciht da jeder wo anders das programm installiert haben könnte
heikles thema 🙂
Das läuft derzeit so ab:
Die updater.exe liegt im User-Tempordner. In den Anwendungsordner schreibe ich nur die Dateien die geupdated werden sollen. Vom K_Updater landet dort gar nichts.
Die DLL ruft die updater.exe auf und übergibt dieser dann den Anwendungspfad der Applikation, die die DLL eingebettet hat.
Ich frage mich jetzt nur, ob es an dieser Stelle bei irgendjemandem Probleme gab, da es offenbar gerade ein Thema wird. Bei mir wurden immer alle Dateien ins korrekte Verzeichnis gelegt.
Es ist aber kein Problem zusätzlich in die K_Settings noch einen Parameter einzubetten in dem man den Ausführpfad manuell ändern kann. Derzeit ist es aber immer genau der Pfad der exe-Anwendung, die die DLL eingebettet hat. Also nicht der Pfad der updater.exe.
Es ist aber kein Problem zusätzlich in die K_Settings noch einen Parameter einzubetten in dem man den Ausführpfad manuell ändern kann. Derzeit ist es aber immer genau der Pfad der exe-Anwendung, die die DLL eingebettet hat. Also nicht der Pfad der updater.exe.
Und genau das wäre wahrscheinlich die Lösung für mein Problem...
Aber nur wegen mir brauchstes net machen, hab mir jetzt aus der Not heraus nen eigenen Updater gebastelt.
"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger Dijkstra
So etwas einzubauen stellt nicht wirklich ein Problem dar. Ich denke so eine Funktion können bestimmt auch andere Leute gebrauchen.
Ich werds mal auf die ToDo schreiben. Vltt schaff ichs schon in die nächste Version einzubauen.
-> Ist umgesetzt
-> Ist umgesetzt
Bleiben die K_Updater Versionen denn noch kompatibel zueiander, wenn du die XML änderst?
Die neue Version 1.2.0 hab ich nun veröffentlich. Die Änderungen könnt ihr im Details auf meiner Homepage und im Blog nachlesen.
Nun gehts zur Version 1.3.0 die sich unter anderem die volle Kompatibilität mit Vista (Admin) auf die Fahne geschrieben hat. Dazu dann auch das Thema Impersonifikation.
Hallo,
also ich habe dein Update gemacht, jedoch gibts ein paar Probleme 🙂
Also ich habe noch immer das selbe Problem mit "Bereite Update vor", es tut sich einfach nichts, und nachher kommt eine Timeout Meldung.
Das Update habe ich einmal per Update Funktion versucht und einmal das Setup von deiner Homepage runtergeladen.
Wenn ich bei beiden ein neues Projekt erstelle, so sagt mir die Information: "Aktuelle Serverversion: 1.1.0".
Was muss ich nun tun? Kannst du mir eventuell helfen?
lg Lion
lg Lion
Tritt der Fehler mit der alten oder der neuen DLL auf...
Die Info aktuelle Serverversion 1.1.0 stimmt doch oder was meinst du damit nun?
Hallo,
mit der neuem.. Habe im Projekt alles durchersetzt und auch mit diesem erstellem Projekt ein Update versuch gemcaht (Projekt angelegt, Update eingespielt).
Naja, ich dachte die Version ist 1.2.0? oder ist da was anderes gemeint?
lg Lion
lg Lion
Die Serverversion ist 1.1.0. Das hat mit der 1.2.0 erstmal nichts zu tun.
Werd das aber mal in der Doku irgendwann noch genauer erklären.
Mensch was ist da los... wie lange hast du bei "wird vorbereitet" gewartet? Ist das dann schon der neue Dialog wenn das angezeigt wird mit dem Icon an der Seite?
Mmmh ich vermute irgendwie einen Fehler im Umfeld des Logging, aber da müsste es dann nach einer Weile einen Timeout geben und das Update müsste durchgeführt werden. Schreib mir mal bitte was genaues zu deiner Serverumgebung. Also was ist wie eingerichtet. Wie sehen die URLs aus die du benutzt.
Da brauch ich mehr Informationen. Eventuell kannst du mir auch die Daten schicken, wie du die Settings gefüllt hast. Dann kann ich daheim in einem Demoprojekt versuchen über deinen Server ein Update durchzuführen. So kann ich den Fehler am schnellsten ermitteln. Kannst du per Mail oder PM schicken.
Generell an alle die das Problem mit "Update wird vorbereitet" haben:
http://www.klausmoster.de/blog/index.php/2008/01/15/k_updater-update-wird-vorbereitet-fehler/
Örm, ich nutze diese Stelle mal für Huldigungen und Lobpreisungen.
*huldigeundlobpreis*
Sehr solides Programm, geht sehr gut. Erspart mir gerade viel Aufwand, daher Lob und und Anerkennung.
Kleines Request nebenbei:
Wie schaut's aus mit der Einbindung von SQL Befehlen zum Update? Würde z.B. sehr gerne ein sql Script durch das Updateprogramm ausführen lassen, momentan muss ich die Datei erst vom Server laden und dann durch mein Proggi auslesen, ausführen lassen und dann löschen. Könnte man das vielleicht mit integrieren?
THX
Coshi
Hallo
Dann versuch ich es mal so ausführlich wie möglich zu beschreiben. Wenn Du noch was dazu wissen musst, dann einfach fragen.
K_Updater Administration: V1.2.0
Installierte Version auf FTP-Server: 1.1.0
BS: Windows Server 2003
FTP Server: Serv-U FTP-Server v2.5i
Verweis auf K_Updater.dll im Projekt gelöscht und neu hinzugefügt.
Code im Projekt:
K_Updater.Settings KSettings;
KSettings.AuthenticateMode = K_Updater.SelfUpdate.authentication.x509certificate;
KSettings.AuthenticateUsername = "";
KSettings.AuthenticatePassword = "";
KSettings.CurrentAppVersion = Application.ProductVersion;
KSettings.Language = K_Updater.SelfUpdate.language.german;
KSettings.Proxy = "";
KSettings.ProxyUsername = "";
KSettings.ProxyPassword = "";
KSettings.UpdatePath = "http://www.xxxxx.de/_updates/updater/Programmname";
K_Updater.SelfUpdate SUpdate = new K_Updater.SelfUpdate(KSettings);
K_Updater.UpdateCheckResult KResult = SUpdate.Check();
if (KResult.Code == 1)
{
Form frmUpdate = new frmUpdateFound(KResult.NewVersion, KResult.Description);
frmUpdate.ShowDialog();
SUpdate.DoUpdate();
}
SUpdate = null;
Fehlerbeschreibung:
Danach startet mein Programm kurz und wird sofort wieder beendet.
Heute bleibt es dabei und bei jedem weiteren Start kommt die beschriebene Fehlermeldung.
Gestern war es noch so, dass ab dem zweiten Start und Updateversuch noch die Meldung "Bereite Update vor" kam aber dann nichts weiter passierte. Nach ca. 20 Sekunden kam dann eine Fehlermeldung mit "Timeout" und alles wurde beendet.
Wie gesagt wenn Du noch Infos brauchst versuche ich die gerne zu liefern.
Ciao
Gerhard
PS:
Was mir gerade noch einfällt. Im Namen der EXE ist ein Leerzeichen. Evtl. spielt das ja eine Rolle.
Ich bereite heute eine DebugDLL vor, die wichtige Debug-Infos in das Verzeichnis der Applikation schreibt. Testet bitte mit dieser DLL dann und schickt mir die entsprechende Log-Datei und eine kleine Fehlerbeschreibung was passiert ist. Vllt kann ich dann so drauf kommen.
habe noch was gefunden
wie ich die server version aktualisieren wollte gings bei mir auch nicht, erst als ich die daten vom ftp server gelöscht habe gings auch mit dem upload
irgendwie haut mit der neuen version nicht mehr viel hin ...
der updater wird manchmal nicht gestartet nach dem download des paketes
der download startet manchmal nicht und angegebene Prozesse werden ab und an nciht beendet weis nicht wieso ...
edit:
was noch oft passiert das der updater beim punkt lösche alte daten einfach stehen bleibt und zwar bei der letzten zu löschenden datei
Hallo EvilMM,
erstmal danke, dass du so eine nützliche Komponente programmiert hast und sie uns zur verfügung stellst.👍
Aber leider habe ich ein Problem, wenn ich ein neues Projekt erstellen will.🙁
In der Updater Administration möchte ich ein neues Projekt erstellen und gebe dann die FTP-Adresse meines lokalen FTP-Servers ein. (Es ist ein IIS 5.0 FTP-Server, läuft auf Win2000) Der K_Updater kann aber nicht zum Server verbinden?
Hat jemand eine Idee woran das liegen könnte?!🤔
Die IIS sollten funktionieren, denn mit dem IE kann ich zum FTP-Server verbinden.
Danke!
tomprogrammer
Hallo,
kannst du den sicher sagen dass es am K_Updater liegt? ich meine, hast du eventuell andere FTP's ausprobiert? gehen die? ja/nein?
Wie gibst du deine Adresse ein? Ich bin am Anfang oft auf die Nase gefallen, in dem ich ftp:// oder ftp miteingebene habe.
Das wird anscheind im Programm fix davor gesetzt, also falls du es auch miteigeben hast, versuch es mal ohne.
lg Lion
lg Lion
Vielen Dank Lion1984,
ich habe es mit dem FileZilla ausprobiert und es funktioniert!
Warum funktioniert es dann mit IIS nicht?
Der IE konnte sich auch anmelden!
OK zu dem Thema müsst ihr mir einfach viel mehr Daten geben. Ein einfaches "es geht nicht" bringt mir einfach nichts.
Also schreibt mir im Fehlerfall bitte auch welchen Server ihr verwendet.
Eventuell kann mir ja der ein oder andere ein FTP-Konto einrichten auf dem ich dann testen kann. Dann kann ich wesentlich besser testen.
Nachdem ich die beiden FTP-Server FileZilla und IIS 5.0 (Windows 2000) verglichen habe konnte ich feststellen, dass der FileZilla-Server mit dem IE funktioniert, wenn man sich mit den eingestellten Daten anmeldet. Der IE kann sich aber im Gegensatz zu den IIS am FileZilla nicht anonym anmelden.
Am IIS meldet sich der IE auch erfolgreich an, allerdings Anonym. Ich habe in den IIS 5.0 auch noch keine Möglichkeit entdeckt, womit man Anmeldedaten einstellen kann.
Den K_Updater habe ich mit dem FileZilla-Server zum Laufen gebracht, mit den IIS (noch) nicht.
Wahrscheinlich liegt es daran, dass die IIS eine Anonyme Anmeldung brauchen, für die ich die Anmeldedaten nicht kenne.
Hoffentlich könnt ihr mit diesn Infos etwas anfangen.
tomprogrammer