Salut,
hier schreibe ich mal ein Tutorial über
Dann wollen wir mal anfangen
Wieso nUpdate?
Viele Benutzer werden sich jetzt wohl fragen: Wieso soll ich soetwas nutzen, statt einer einfachen Textdatei auf einem FTP-Server, welche einfach die aktuelle Versionsnummer und ein Link zu dieser enthält. Was diese Nutzer nicht wissen: Ihr seid schuld, wenn dieses Update einen Virus bzw. Malware installiert, ganz egal, ob ihr etwas dafür könnt oder nicht. Angenommen jemand kapert euren Server und ersetzt einfach die Updatedatei durch seinen Trojaner. Dann werdet ihr zur Verantwortung gezogen - und das kann teuer werden. Es gibt noch eine weitere Möglichkeit, diese Lücke auszunutzen, das ARP-Spoofing, aber detailliert steht da mehr dazu hier. Da viele Updater auch auf FTP-only setzen: Das ist ebenso eine große Schwachstelle, denn FTP ist unsicher, da es keine Verschlüsselung bietet und zudem müssen die Credentials ja für FTP irgendwo mitgeliefert sein. Auch der Aspekt, dass jemand anderes somit Zugriff auf eueren Server bekommt ist natürlich unschön, also gleich wieder vergessen. Genau dafür existiert als Protokoll HTTP(S). Um auf die Pakete zurückzukommen: nUpdate signiert diese Updatepakete. Dies bedeutet, dass selbst wenn der Angreifer euren Webspace kapern sollte, er die Updatepakete ohne eure "Unterschrift" (signieren = Unterschreiben) nicht austauschen kann. Dafür sorgt ein 8192 Bit RSA-Schlüsselpaar (das muss euch nicht viel sagen, nur, dass 4096 schon als nahezu unknackbar gilt). Dazu kommt natürlich noch, dass so ein Updatesystem wesentlich benutzerfreundlicher ist, das werdet ihr ja dann sehen. Also wollen wir starten
Einrichtung
Um nUpdate nutzen zu können, benötigt ihr einen FTP-Server. Zwar nicht zwingend, denn eigene Handler für die Uploads etc. sind möglich, aber die integrierte Unterstützung setzt auf FTP(S). Wenn ihr noch keinen habt, könnt ihr euch auf vielen verschiedenen Seiten kostenlos einen zulegen. Dazu einfach mal in Google mit dem Suchbegriff
Zuerst solltet ihr euch nUpdate herunterladen. Dies geht über diesen Link:
nupdate.net/ unter Downloads oder im Thread: nUpdate - Die einfache Updatelösung
Anschließend entpackt ihr das Archiv und erhaltet 3 Ordner:
- nUpdate
- nUpdate.Administration
- nUpdate.Administration.TransferInterface
- nUpdate.Client.GuiInterface
Wir wollen nUpdate erstmal auf unserm FTP-Server einrichten. Dazu navigieren wir in den Ordner
Fangen wir an, indem wir auf die Schaltfläche mit der Aufschrift
Der Ordner muss noch nicht existieren. Desweiteren könnt ihr noch den Speicherort auswählen und angeben, ob eure Account-Daten gespeichert werden sollen. Wir bestätigen mit einem Klick auf
Wenn alles eingeben ist, wählen wir
Wir bestätigen in dem FTP-Client mit einem Klick auf
Wenn ihr Statistiken braucht, könnt ihr euch nun einen Statistik-Server erstellen.
Dazu wählt Ihr
Bestätigt die kommende Meldung mit "OK". Ich vermute, dass Ihr dann noch keinen Server erstellt habt und die Liste leer ist. Falls nicht könnt Ihr den folgenden Schritt einfach auslassen.
Dann klickt Ihr auf
So, nun braucht Ihr externen Zugriff auf eure Datenbank. Dies lässt sich bei den meisten Hostern durch ein Support-Ticket aktivieren, falls dies nicht standardmäßig der Fall ist. Bei PHP-Friends wäre diese Info z.B. unter php-friends.de/blog/wiki/zugangsdaten/mysql/ unten bei
Bei
So kann das dann aussehen.
Also gebt Ihr bei
Bei
Das war's. Auf
Dann könnt Ihr in der Liste einfach den Server auswählen und Enter drücken.
Wir klicken zurück im Dialog weiter auf
Erster Start
Wir öffnen unser Projekt über
nUpdate in ein Projekt integrieren
Das ist ziemlich einfach. Als erstes öffnen wir unsere Projektmappe, gehen zu
Anschließend gehen wir unten rechts auf
und wählen die
Nun navigieren wir in unserem geöffneten nUpdate-Projekt zu
Geht dann in eure
Unter den eingefügten Code schreibt Ihr dann noch:
Das wird dann alles automatisieren und das integrierte UI anzeigen. Falls Ihr möchtet, dass im Hintergrund gesucht wird und nur ein Dialog kommt, wenn ein Update gefunden wird und Ihr keinen Such- und "Keine Updates gefunden"-dialog wollt, dann macht Ihr noch
Als letztes brauchen wir noch ein Attribut für die aktuelle Version, welche eine große Rolle spielt.
Dazu geht Ihr in die
In VB.NET müsst ihr in dem Projektmappen-Explorer auf
Dort findet ihr ebenfalls eine Datei mit dem Namen
Falls ein Fehler kommt, ganz oben Import setzen:
Das
Diese Version müsst Ihr bei jedem Update ändern. Solltet Ihr also grade die
Sprache
Bei dem Teil
Ihr könnt eigene Sprachen hinzufügen, wenn Ihr wollt. Dazu müsst Ihr euch zunächst das Language Template laden: nupdate.net/langtemplate.json
Dann müsst Ihr dort eben das Ganze bearbeiten und die JSON in euer Projekt mitliefern und zum Client bringen (einfach in AppData) schreiben o. ä. Wenn Ihr das alles habt, kommt die Eigenschaft
Wenn Ihr bspw. italienisch hinzugefügt habt, dann ruft Ihr
Der erste Parameter ist also die Kultur (
Solltet Ihr eine Sprache nutzen, die es nicht gibt und die nicht hinzugefügt wurde, dann wird automatisch Englisch genutzt.
Das könnt Ihr aber trotzdem machen, da sich nach dieser Sprache auch der Changelog richtet. Solltet Ihr also einen italienischen Changelog haben, aber keine italienische Sprachdatei und Ihr stellt trotzdem Italienisch ein, so ist das User Interface englisch, aber der Changelog italienisch.
Mehr dazu findet Ihr aber in
Weitere Einstellungen
Alle Eigenschaften + Methoden und Events findet Ihr unter nupdate.net/docs
Ich liste hier kurz das wichtigste auf:
Updateargumente
Diese Argumente könnt Ihr festlegen und diese werden an eure Anwendung übergeben, je nachdem, ob das Installieren erfolgreich war oder fehlgeschlagen ist.
Wenn das Installieren klappt, wird an eure Anwendung als Argument
Pakete verwalten
Nun gehen wir in unser Projekt und können die Pakete verwalten. Fügt ein neues Paket hinzu, indem Ihr
Ein neuer Dialog öffnet sich. Ich werde jetzt auf jede Sektion eingehen und was Ihr dort einstellen könnt:
Spoiler anzeigen
General
Hier könnt Ihr Version und Entwicklungsstadium angeben.
Die Version
Den Development Build könnt Ihr dann in dem NumericUpDown daneben angeben. 0 bedeutet, dass dieser nicht beachtet wird und die Version zum Beispiel dann nur 1.2.3.0 Beta ist.
Die Hierarchie sollte klar sein:
1.2.3 Alpha 1 würde ebenso nicht mehr angezeigt, wenn 1.2.3 Alpha 2 existiert usw.
Also immer in dieser Hierarchie und Release steht natürlich ganz oben.
Dann könnt Ihr bei
Daraufhin könnt Ihr festlegen, auf welchen Architekturen das Update installiert werden soll, was ja durchaus mal sein kann, dass man da unterscheiden muss.
x86 ist für 32 Bit-Systeme, x64 für 64 Bit-Systeme und AnyCPU ist für beides, also unabhängig und damit der Standard.
Die nächste Einstellung ist
Stellt euch vor, Ihr habt ein Spiel und 1GB an neuen Karten oder was weiß ich, ohne die Einstellung müsstest Ihr die jedes Mal mitliefern, um sicherzugehen, dass diese auch wirklich installiert werden. Wenn diese nämlich zum Beispiel in 1.2.3 dazukommen und danach schon 1 Tag später ein Update 1.2.4 kommt, dann wird das 1.2.4 als neuestes Update angezeigt und es könnte sein, dass so mancher User das 1.2.3 noch nicht geladen hat, wo diese Daten drin sind. Ihr müsstet also zur Sicherheit die Mapdaten in 1.2.4 auch wieder mitliefern, obwohl Ihr nur einen kleinen Bug gefixed habt. Das ist natürlich blöd, nervig und kostet Zeit.
Dies wird das Problem lösen, denn wenn Ihr dieses Paket als "necessary", also notwendig markiert, dann muss der Client es installieren, egal ob es neuere Versionen gibt oder nicht. Somit würden also als neue Updates dann 1.2.3 und 1.2.4 angezeigt werden und beide auf einen Ruck installiert.
Wichtig dabei ist auch, dass der nUpdate Installer die Reihenfolge der Versionen beim Installieren einhält, um Konflikte auszuschließen.
Am Ende könnt Ihr noch
Changelog
Der Changelog, also die Änderungen sind auch ein wichtiger Bestandteil eures Pakets und müssen zumindest in der Sprache "Englisch" angegeben werden. Oben links könnt ihr eine Kultur für die Sprache auswählen (z. B. de-DE für Deutschland, en-US für die USA usw.) und dann jeweils im Textfeld unten den Changelog in dieser Sprache angeben.
Das Ganze läuft über Kulturen, da Ihr somit mehr Möglichkeiten habt und Inhalte individuell angeben könnt.
Sollte euer nUpdate-Projekt zum Beispiel als Sprache auch Finnisch unterstützten, aber Ihr vergesst, einen Changelog auf Finnisch anzugeben, dann bekommen diese den englischen angezeigt, da das am Gängigsten ist. Der Changelog richtet sich also nach der ausgewählten Kultur im nUpdate-Projekt bei
Ihr könnt natürlich den Changelog auch aus einer Datei laden.
Spezielle Zeichen findet Ihr rechts oben auch noch, damit Ihr diese nicht mühsam zusammensuchen müsst und schnell parat habt.
Availability
Auch eine sehr coole Sache, denn hier könnt Ihr einstellen, welche Versionen Ihr nicht mehr unterstützen wollt. Falls also Version 1.0 auf XP läuft und Version 2.0 für Windows Vista dann gemacht wurde (als Beispiel mal), dann könnt Ihr unten "1.0.0.0" eingeben und hinzufügen. Dieses Update wird dann für die Clients mit Version 1.0 nicht angezeigt und diese bleiben, wo sie sind. Hingegen die Vista-User mit Version 2.0 werden das Update bekommen. Sei jetzt mal dahingestellt, ob das so genau Sinn macht, weil jeder das ja anders handhabt, aber um das Prinzip zu verstehen.
Operations
Ein wirklich sehr wichtiger Bestandteil eines Updates sind die Operationen. Dort könnt Ihr wirklich alles angeben und beim Installieren des Updates wird das dann gemacht. Falls Ihr also eine Datei löschen wollt, einen Registryeintrag machen müsst oder einen Service starten, das könnt Ihr hier machen.
Sogar eigene C#-Scripts können ausgeführt werden, falls Ihr noch was braucht.
Eine Operation namens
Es gibt dort 4 Ordner,
Ihr könnt oben nun einen Ordner samt seiner Unterordner und Dateien hinzufügen, nur den Inhalt eines Ordners oder einzelne Dateien. Durch einen Klick auf "Information" (bald wird dies über den Knopf mit dem Fragezeichen in der Menüleiste oben rechts verfügbar sein) wird euch gezeigt, wie das Ganze abläuft.
Sollte euer Programmordner also folgendes enthalten...
... dann könnt Ihr diese mit den neuen überschreiben, indem Ihr unter "Program" auf "Add files" klickt und dann diese Dateien (YourProgram.exe und Settings.txt), die Ihr vorhin auf den aktuellsten Stand gebracht habt, auswählt. Dann werden diese die alten ersetzen.
Falls ein Ordner im Programmverzeichnis vorhanden ist, müsst Ihr auch einen Ordner hinzufügen. Zum Beispiel wieder:
So könnt Ihr dann ebenfalls wieder die Dateien hinzufügen und nun auch den ganzen Ordner samt Inhalt (TestOrdner) mit "Add folder". Ordner werden nie ganze Ordner ersetzen, sondern nur die Dateien darin. Solltet Ihr also einen leeren Ordner hinzufügen, so wird der alte Ordner beim Client nicht mit einem leeren ersetzt, sondern alles bleibt wie es ist. Das Ganze geht dann rekursiv, also wiederholt sich immer wieder für alle hinzugefügten Unterordner.
Neue Dateien könnt Ihr natürlich auch hinzufügen. Diese ersetzen nichts, sondern kommen einfach hinzu.
Und so geht das natürlich nicht nur für das Programmverzeichnis, sondern auch für AppData, Temp und Desktop.
Um Dateien zu löschen, braucht Ihr die Operation
Zu den Operationen jetzt mehr:
Klickt auf
Dort könnt Ihr ein Item auswählen und auf den Knoten
Dann, wenn nicht automatisch gesehen, auswählen und ausfüllen.
Das ganze sollte selbsterklärend sein und es wäre ein wenig viel, auf jede Operation einzugehen. Solltet Ihr spezielle Fragen zu einer haben, könnt Ihr aber gerne unten fragen.
Eine Sache, da das oft falsch gemacht wird: Bei "Terminate process" nur den Namen des Prozesses angeben, kein
Ansonsten helfen euch auch die Cues, also die grauen Texte, die bereits in den TextBoxen stehen bei den Eingaben.
Soweit so gut, dann könnt Ihr nun auf
Schlusswort
Das waren natürlich noch lange nicht alle Features von nUpdate. Es wird bald ein weiterer Teil kommen, der eigene UIs behandelt.
hier schreibe ich mal ein Tutorial über
nUpdate
, das Updatesystem von @Trade, das mittlerweile eine sehr gute Alternative zum Updatesystem.NET darstellt, da es alles wichtige, was man auch von dort kannte, mitbringt und viele neue Features anbietet. Es wird z. Z. noch weiterentwickelt und bald gibt es auch coole Features wie Delta Patching, Differentialupdates usw.Dann wollen wir mal anfangen
Wieso nUpdate?
Viele Benutzer werden sich jetzt wohl fragen: Wieso soll ich soetwas nutzen, statt einer einfachen Textdatei auf einem FTP-Server, welche einfach die aktuelle Versionsnummer und ein Link zu dieser enthält. Was diese Nutzer nicht wissen: Ihr seid schuld, wenn dieses Update einen Virus bzw. Malware installiert, ganz egal, ob ihr etwas dafür könnt oder nicht. Angenommen jemand kapert euren Server und ersetzt einfach die Updatedatei durch seinen Trojaner. Dann werdet ihr zur Verantwortung gezogen - und das kann teuer werden. Es gibt noch eine weitere Möglichkeit, diese Lücke auszunutzen, das ARP-Spoofing, aber detailliert steht da mehr dazu hier. Da viele Updater auch auf FTP-only setzen: Das ist ebenso eine große Schwachstelle, denn FTP ist unsicher, da es keine Verschlüsselung bietet und zudem müssen die Credentials ja für FTP irgendwo mitgeliefert sein. Auch der Aspekt, dass jemand anderes somit Zugriff auf eueren Server bekommt ist natürlich unschön, also gleich wieder vergessen. Genau dafür existiert als Protokoll HTTP(S). Um auf die Pakete zurückzukommen: nUpdate signiert diese Updatepakete. Dies bedeutet, dass selbst wenn der Angreifer euren Webspace kapern sollte, er die Updatepakete ohne eure "Unterschrift" (signieren = Unterschreiben) nicht austauschen kann. Dafür sorgt ein 8192 Bit RSA-Schlüsselpaar (das muss euch nicht viel sagen, nur, dass 4096 schon als nahezu unknackbar gilt). Dazu kommt natürlich noch, dass so ein Updatesystem wesentlich benutzerfreundlicher ist, das werdet ihr ja dann sehen. Also wollen wir starten
Einrichtung
Um nUpdate nutzen zu können, benötigt ihr einen FTP-Server. Zwar nicht zwingend, denn eigene Handler für die Uploads etc. sind möglich, aber die integrierte Unterstützung setzt auf FTP(S). Wenn ihr noch keinen habt, könnt ihr euch auf vielen verschiedenen Seiten kostenlos einen zulegen. Dazu einfach mal in Google mit dem Suchbegriff
kostenloser webspace
suchen - da findet ihr garantiert einen!Zuerst solltet ihr euch nUpdate herunterladen. Dies geht über diesen Link:
nupdate.net/ unter Downloads oder im Thread: nUpdate - Die einfache Updatelösung
Anschließend entpackt ihr das Archiv und erhaltet 3 Ordner:
- nUpdate
- nUpdate.Administration
- nUpdate.Administration.TransferInterface
- nUpdate.Client.GuiInterface
Wir wollen nUpdate erstmal auf unserm FTP-Server einrichten. Dazu navigieren wir in den Ordner
nUpdate.Administration
und starten die darin enthaltende Anwendung nUpdate Administration.exe
(ggf. als Administrator, wenn ihr wollt, dass nUpdate sich in die Registry schreibt, damit die Dateiendungen direkt mit dem Programm gekoppelt werden). Fangen wir an, indem wir auf die Schaltfläche mit der Aufschrift
New project
klicken. Nun werden die Schlüssel generiert, das kann kurz dauern. Anschließend geben wir den Namen unseres Programms und die Http-Update-Url an. Euer Webspace muss eine Url haben, wodurch dieser über das Http-Protokoll erreichbar ist. Diese wählt ihr meistens bei der Erstellung des Accounts aus. Anschließend geben wir noch den Ort von nUpdate an. Ihr solltet nUpdate in einem Unterverzeichnis erstellen, in meinem Fall ist es /nUpdate
:Der Ordner muss noch nicht existieren. Desweiteren könnt ihr noch den Speicherort auswählen und angeben, ob eure Account-Daten gespeichert werden sollen. Wir bestätigen mit einem Klick auf
Continue
. Nun geben wir unsere FTP-Daten an. Das sollte alles bei eurem Webspace-Anbieter unter FTP-Informationen stehen.Wenn alles eingeben ist, wählen wir
Search on Server
. Nun öffnet sich ein FTP-Client, mit welchem wir direkt versuchen auf unseren Server zu verbinden. Wenn dies geschehen ist, müssen wir den Ordner wählen, den wir bei Schritt 1 angegeben haben (bei mir http://hurricaneproject.bplaced.de/nUpdate
). Wir müssen diesen ggf. erst erstellen.Wir bestätigen in dem FTP-Client mit einem Klick auf
Continue
und gehen auf die nächste Seite mit einem weiteren Klick auf Continue (Der ausgewählte Ordner sollte nun in der TextBox hinter Directory stehen).Wenn ihr Statistiken braucht, könnt ihr euch nun einen Statistik-Server erstellen.
Dazu wählt Ihr
Use a statistics server
und klickt auf Select server...
. Bestätigt die kommende Meldung mit "OK". Ich vermute, dass Ihr dann noch keinen Server erstellt habt und die Liste leer ist. Falls nicht könnt Ihr den folgenden Schritt einfach auslassen.
Dann klickt Ihr auf
Add server
. So, nun braucht Ihr externen Zugriff auf eure Datenbank. Dies lässt sich bei den meisten Hostern durch ein Support-Ticket aktivieren, falls dies nicht standardmäßig der Fall ist. Bei PHP-Friends wäre diese Info z.B. unter php-friends.de/blog/wiki/zugangsdaten/mysql/ unten bei
Externer Zugriff
zu finden. Sollte das bei eurem Hoster nicht gehen, dann habt Ihr momentan leider noch nicht die Möglichkeit Statistiken zu nutzen. Sobald euer Hoster das aktiviert hat und die MySQL-Datenbank zugreifbar ist, könnt Ihr den Dialog mit den Eingaben beglücken.Bei
Host/Server
gebt Ihr einfach die Adresse ein, die der Hoster für externen MySQL-Zugriff bereitstellt. In diesem Fall habe ich als Beispiel das Ticket von @Trade, in dem dann die Daten zugesendet wurden:So kann das dann aussehen.
Also gebt Ihr bei
Host/Server
z. B. web1.php-friends.de
an, je nachdem, bei welchem Hoster Ihr seid und was er an Daten angibt. Bei Database
kommt der Name der Datenbank hin, in der die Statistikdaten gespeichert werden sollen. Wenn diese noch nicht existiert, wird diese erstellt.Bei
Username
kommt auch der hin, der vom Hoster angegeben wurde. Dies steht dann auch wie oben im Bild irgendwo.Das war's. Auf
Save
klicken! Dann könnt Ihr in der Liste einfach den Server auswählen und Enter drücken.
Wir klicken zurück im Dialog weiter auf
Continue
. Für den Fall, dass ihr einen Proxy habt, könnt ihr diesen nun eintragen. Dort einfach URL des Proxy, Benutzername und Passwort. Falls Ihr keine Credentials angebt, werden die Default Credentials verwendet. Je nachdem, füllt Ihr das aus. Sollte selbsterklärend sein. Wir klicken wieder auf Continue
und das ganze wird abgeschlossen.Erster Start
Wir öffnen unser Projekt über
Open project
. Wenn ihr eine Fehlermeldung seht, könnt ihr diese ignorieren. Uns werden allerlei Informationen angezeigt, die wir u. a. während des Erstellungsprozesses angegeben haben.nUpdate in ein Projekt integrieren
Das ist ziemlich einfach. Als erstes öffnen wir unsere Projektmappe, gehen zu
Projekt
> Verweis hinzufügen...
Anschließend gehen wir unten rechts auf
Durchsuchen...
und wählen die
nUpdate.dll
-Datei aus. Diese befindet sich in nUpdate\Providing TAP
oder nUpdate\No TAP
. Wenn Ihr .NET 4.5 benutzt, könnt Ihr die aus "Provide TAP" nutzen. Diese integriert die Schlüsselworter async
und await
und bietet Tasks an. Dies sind neue Features der aynchronen Programmierung seit .NET 4.5. Ansonsten ( < .NET 4.5 ) nehmt Ihr die DLL aus "No TAP" und habt halt nur die normalen Methoden und alles arbeitet mit Events. Wir klicken auf Hinzufügen
und auf OK
.Nun navigieren wir in unserem geöffneten nUpdate-Projekt zu
Copy data
(ganz unten) und wählen anschließend unsere bevorzugte Sprache aus. Ist das getan, wird durch einen Klick auf Copy Source
ein Codeschnipsel in unsere Zwischenablage kopiert:Geht dann in eure
void
/Sub
bzw. Prozedur, in der Ihr die Updatesuche usw. laufen lassen wollt (z. B. Click
-Event eines Button
). Dort fügt Ihr den Code ein. Falls Fehler kommen, braucht Ihr noch das ganz oben:Unter den eingefügten Code schreibt Ihr dann noch:
Das wird dann alles automatisieren und das integrierte UI anzeigen. Falls Ihr möchtet, dass im Hintergrund gesucht wird und nur ein Dialog kommt, wenn ein Update gefunden wird und Ihr keinen Such- und "Keine Updates gefunden"-dialog wollt, dann macht Ihr noch
Als letztes brauchen wir noch ein Attribut für die aktuelle Version, welche eine große Rolle spielt.
Dazu geht Ihr in die
AssemblyInfo.cs
und fügt das ein:In VB.NET müsst ihr in dem Projektmappen-Explorer auf
Alle Dateien anzeigen
gehen und anschließend My Project
aufklappen:Dort findet ihr ebenfalls eine Datei mit dem Namen
AssemblyInfo.vb
, in welcher ihr folgendes eintragt:Falls ein Fehler kommt, ganz oben Import setzen:
Das
0.1
ist ein Beispiel. Sollte eure aktuelle Version 1.0
sein, so gibt Ihr das da an. Wie Ihr das alles angeben könnt, da gibt es viele Möglichkeiten. @Trade hat diese im nUpdate-Thread aufgelistet bei den Details zur UpdateVersion
.Diese Version müsst Ihr bei jedem Update ändern. Solltet Ihr also grade die
1.2
fertigprogrammiert haben, so setzt Ihr bevor Ihr die Dateien in ein Paket einbindet (mehr dazu, wie das geht, kommt dann natürlich noch unten) diese Attribut von bspw. 1.0
innen auf 1.2
. Somit weiß nUpdate, dass dann die aktuelle Version 1.2
ist und sucht nach Versionen darüber. Bei Fragen fragen.Sprache
Bei dem Teil
new CultureInfo("en")
könnt Ihr nun die Sprache angeben. Mitgeliefert ist en
, de-DE
, de-AT
und de-CH
. Im nächsten Update wird wohl Englisch noch ausgeweitet und es kommen evtl. mehr Sprachen.Ihr könnt eigene Sprachen hinzufügen, wenn Ihr wollt. Dazu müsst Ihr euch zunächst das Language Template laden: nupdate.net/langtemplate.json
Dann müsst Ihr dort eben das Ganze bearbeiten und die JSON in euer Projekt mitliefern und zum Client bringen (einfach in AppData) schreiben o. ä. Wenn Ihr das alles habt, kommt die Eigenschaft
manager.CultureFilePaths
ins Spiel.Wenn Ihr bspw. italienisch hinzugefügt habt, dann ruft Ihr
manager.CultureFilePaths.Add(new CultureInfo("it"), "PfadZurJson");
auf.Der erste Parameter ist also die Kultur (
it
für Italien) und der zweite der Pfad zur Sprachdatei. Dann könnt Ihr nun auch Italienisch nutzen. Solltet Ihr eine Sprache nutzen, die es nicht gibt und die nicht hinzugefügt wurde, dann wird automatisch Englisch genutzt.
Das könnt Ihr aber trotzdem machen, da sich nach dieser Sprache auch der Changelog richtet. Solltet Ihr also einen italienischen Changelog haben, aber keine italienische Sprachdatei und Ihr stellt trotzdem Italienisch ein, so ist das User Interface englisch, aber der Changelog italienisch.
Mehr dazu findet Ihr aber in
Pakete verwalten
unten dann in der Sektion Changelog
.Weitere Einstellungen
Alle Eigenschaften + Methoden und Events findet Ihr unter nupdate.net/docs
Ich liste hier kurz das wichtigste auf:
IncludeAlpha
- Alpha-Versionen in die Suche einbeziehenIncludeBeta
- Beta-Versionen in die Suche einbezieheCloseHostApplication
- Gibt an, ob euer Programm vor dem installieren geschlossen werden soll. Solltet Ihr also keine Daten überschreiben, die euer Programm gerade nutzt, so könnt Ihr das aufFalse
setzen. Standard istTrue
.Proxy
- Ein Proxy, den Ihr hier angeben könntArguments
- Die Updateargumente, die Ihr an eure Anwendung nach dem Installieren übergeben wollt. Mehr dazu darunter.
Updateargumente
Diese Argumente könnt Ihr festlegen und diese werden an eure Anwendung übergeben, je nachdem, ob das Installieren erfolgreich war oder fehlgeschlagen ist.
Wenn das Installieren klappt, wird an eure Anwendung als Argument
success
übergeben, andernfalls fail
. Abrufen könnt Ihr diese Angaben dann im Einstiegspunkt in euerer Anwendung (Main
). Solltet Ihr nicht wissen, wie das geht, schaut mal bei Google oder fragt nach.Pakete verwalten
Nun gehen wir in unser Projekt und können die Pakete verwalten. Fügt ein neues Paket hinzu, indem Ihr
Add package
klickt.Ein neuer Dialog öffnet sich. Ich werde jetzt auf jede Sektion eingehen und was Ihr dort einstellen könnt:
General
Hier könnt Ihr Version und Entwicklungsstadium angeben.
Die Version
0.0.0.0
ist nicht gültig. Sie muss also mindestens 0.1
sein. Als Entwicklungsstadium könnt Ihr dann Alpha, Beta, RelaseCandidate und Release wählen. Nach Alpha-Versionen wird nur gesucht, wenn im Client manager.IncludeAlpha
auf True
gesetzt wird und entsprechend auch bei Beta-Versionen mit manager.IncludeBeta
. ReleaseCandidate und Release-Versionen werden natürlich immer angezeigt.Den Development Build könnt Ihr dann in dem NumericUpDown daneben angeben. 0 bedeutet, dass dieser nicht beachtet wird und die Version zum Beispiel dann nur 1.2.3.0 Beta ist.
Die Hierarchie sollte klar sein:
- Release
- ReleaseCandidate
- Beta
- Alpha
1.2.3 Alpha 1 würde ebenso nicht mehr angezeigt, wenn 1.2.3 Alpha 2 existiert usw.
Also immer in dieser Hierarchie und Release steht natürlich ganz oben.
Dann könnt Ihr bei
Publish this update
angeben, ob das Paket schon hochgeladen und für jeden herunterladbar sein soll oder nicht (standardmäßig ist dies aktiviert). Wenn nicht aktiviert, wird das Paket zunächst lokal gespeichert und kann später dann hochgeladen werden. Wenn es noch nicht online ist, dann bekommt es der Client natürlich auch noch nicht angezeigt.Daraufhin könnt Ihr festlegen, auf welchen Architekturen das Update installiert werden soll, was ja durchaus mal sein kann, dass man da unterscheiden muss.
x86 ist für 32 Bit-Systeme, x64 für 64 Bit-Systeme und AnyCPU ist für beides, also unabhängig und damit der Standard.
Die nächste Einstellung ist
Necessary Update
und sehr nützlich. Wenn Ihr beispielsweise eine große Menge Daten habt und diese nur 1 mal und nicht jedes Mal hochladen wollt, dann braucht Ihr das.Stellt euch vor, Ihr habt ein Spiel und 1GB an neuen Karten oder was weiß ich, ohne die Einstellung müsstest Ihr die jedes Mal mitliefern, um sicherzugehen, dass diese auch wirklich installiert werden. Wenn diese nämlich zum Beispiel in 1.2.3 dazukommen und danach schon 1 Tag später ein Update 1.2.4 kommt, dann wird das 1.2.4 als neuestes Update angezeigt und es könnte sein, dass so mancher User das 1.2.3 noch nicht geladen hat, wo diese Daten drin sind. Ihr müsstet also zur Sicherheit die Mapdaten in 1.2.4 auch wieder mitliefern, obwohl Ihr nur einen kleinen Bug gefixed habt. Das ist natürlich blöd, nervig und kostet Zeit.
Dies wird das Problem lösen, denn wenn Ihr dieses Paket als "necessary", also notwendig markiert, dann muss der Client es installieren, egal ob es neuere Versionen gibt oder nicht. Somit würden also als neue Updates dann 1.2.3 und 1.2.4 angezeigt werden und beide auf einen Ruck installiert.
Wichtig dabei ist auch, dass der nUpdate Installer die Reihenfolge der Versionen beim Installieren einhält, um Konflikte auszuschließen.
Am Ende könnt Ihr noch
Include into statistics
aktivieren oder deaktivieren. Falls Ihr also einen Statistikserver eingerichtet habt und Informationen über die Downloads dieses Pakets/Updates wollt, dann könnt Ihr das checken. Die Option ist ausgegraut (disabled), wenn Ihr keinen Server eingerichtet habt.Changelog
Der Changelog, also die Änderungen sind auch ein wichtiger Bestandteil eures Pakets und müssen zumindest in der Sprache "Englisch" angegeben werden. Oben links könnt ihr eine Kultur für die Sprache auswählen (z. B. de-DE für Deutschland, en-US für die USA usw.) und dann jeweils im Textfeld unten den Changelog in dieser Sprache angeben.
Das Ganze läuft über Kulturen, da Ihr somit mehr Möglichkeiten habt und Inhalte individuell angeben könnt.
Sollte euer nUpdate-Projekt zum Beispiel als Sprache auch Finnisch unterstützten, aber Ihr vergesst, einen Changelog auf Finnisch anzugeben, dann bekommen diese den englischen angezeigt, da das am Gängigsten ist. Der Changelog richtet sich also nach der ausgewählten Kultur im nUpdate-Projekt bei
new UpdateManager(..., new CultureInfo("de-DE"));
. In diesem Fall müsstet Ihr einen Changelog für Deutschland (de-DE) angeben, damit dieser entsprechend angezeigt wird. Wenn dann zum Beispiel new CultureInfo("es")
dort steht, dann würde ein Changelog für spanische Clients dort angezeigt werden, wenn Ihr einen bereitstellt. Wenn nicht, dann eben englisch.Ihr könnt natürlich den Changelog auch aus einer Datei laden.
Spezielle Zeichen findet Ihr rechts oben auch noch, damit Ihr diese nicht mühsam zusammensuchen müsst und schnell parat habt.
Availability
Auch eine sehr coole Sache, denn hier könnt Ihr einstellen, welche Versionen Ihr nicht mehr unterstützen wollt. Falls also Version 1.0 auf XP läuft und Version 2.0 für Windows Vista dann gemacht wurde (als Beispiel mal), dann könnt Ihr unten "1.0.0.0" eingeben und hinzufügen. Dieses Update wird dann für die Clients mit Version 1.0 nicht angezeigt und diese bleiben, wo sie sind. Hingegen die Vista-User mit Version 2.0 werden das Update bekommen. Sei jetzt mal dahingestellt, ob das so genau Sinn macht, weil jeder das ja anders handhabt, aber um das Prinzip zu verstehen.
Operations
Ein wirklich sehr wichtiger Bestandteil eines Updates sind die Operationen. Dort könnt Ihr wirklich alles angeben und beim Installieren des Updates wird das dann gemacht. Falls Ihr also eine Datei löschen wollt, einen Registryeintrag machen müsst oder einen Service starten, das könnt Ihr hier machen.
Sogar eigene C#-Scripts können ausgeführt werden, falls Ihr noch was braucht.
Eine Operation namens
Replace file/folders
ist standardmäßig schon da und lässt sich auch nicht löschen. In dieser könnt Ihr die Binaries, also aktualisierten Dateien etc. angeben, die die alten überschreiben sollen.Es gibt dort 4 Ordner,
Program
für den Pfad, in dem eure .exe (Anwendung) liegt, AppData
für das AppData-Verzeichnis, Temp
für den Temp-Ordner und Desktop
für den Desktoppfad.Ihr könnt oben nun einen Ordner samt seiner Unterordner und Dateien hinzufügen, nur den Inhalt eines Ordners oder einzelne Dateien. Durch einen Klick auf "Information" (bald wird dies über den Knopf mit dem Fragezeichen in der Menüleiste oben rechts verfügbar sein) wird euch gezeigt, wie das Ganze abläuft.
Sollte euer Programmordner also folgendes enthalten...
- YourProgram.exe
- Settings.txt
... dann könnt Ihr diese mit den neuen überschreiben, indem Ihr unter "Program" auf "Add files" klickt und dann diese Dateien (YourProgram.exe und Settings.txt), die Ihr vorhin auf den aktuellsten Stand gebracht habt, auswählt. Dann werden diese die alten ersetzen.
Falls ein Ordner im Programmverzeichnis vorhanden ist, müsst Ihr auch einen Ordner hinzufügen. Zum Beispiel wieder:
- YourProgram.exe
- Settings.txt
- TestOrdner
- DateiImOrdner.txt
So könnt Ihr dann ebenfalls wieder die Dateien hinzufügen und nun auch den ganzen Ordner samt Inhalt (TestOrdner) mit "Add folder". Ordner werden nie ganze Ordner ersetzen, sondern nur die Dateien darin. Solltet Ihr also einen leeren Ordner hinzufügen, so wird der alte Ordner beim Client nicht mit einem leeren ersetzt, sondern alles bleibt wie es ist. Das Ganze geht dann rekursiv, also wiederholt sich immer wieder für alle hinzugefügten Unterordner.
Neue Dateien könnt Ihr natürlich auch hinzufügen. Diese ersetzen nichts, sondern kommen einfach hinzu.
Und so geht das natürlich nicht nur für das Programmverzeichnis, sondern auch für AppData, Temp und Desktop.
Um Dateien zu löschen, braucht Ihr die Operation
Delete file
. Zu den Operationen jetzt mehr:
Klickt auf
Operations
und es erscheint nun rechts eine Liste. Dort könnt Ihr ein Item auswählen und auf den Knoten
Operations
, wo Ihr grade draufgeklickt habt, ziehen. Also per Drag&Drop.Dann, wenn nicht automatisch gesehen, auswählen und ausfüllen.
Das ganze sollte selbsterklärend sein und es wäre ein wenig viel, auf jede Operation einzugehen. Solltet Ihr spezielle Fragen zu einer haben, könnt Ihr aber gerne unten fragen.
Eine Sache, da das oft falsch gemacht wird: Bei "Terminate process" nur den Namen des Prozesses angeben, kein
.exe
o. ä.!Ansonsten helfen euch auch die Cues, also die grauen Texte, die bereits in den TextBoxen stehen bei den Eingaben.
Soweit so gut, dann könnt Ihr nun auf
Create package
klicken und warten, bis sich der Dialog schließt. Sollte es ein Problem geben und das Hochladen nicht gehen, so wird das Paket lokal gespeichert und Ihr könnt es später erneut versuchen. Dies passiert auch, wenn ihr das Hochladen über das graue "X" abbrecht. Dazu noch ein Hinweis, denn es gibt einen Bug in der Beta 4, der den Dialog beim Abbrechen nicht automatisch schließt. Dann einfach kurz warten und den Dialog selber zumachen. Dies wurde aber von @Trade in der aktuellen Versionen, die er grade entwickelt, schon behoben. Schlusswort
Das waren natürlich noch lange nicht alle Features von nUpdate. Es wird bald ein weiterer Teil kommen, der eigene UIs behandelt.
Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von „VincentTB“ ()