Hallo
Fast habe ich es geschafft unseren launcher für arma3 fertig zu stellen.
Denn noch habe ich jetzt die letzte frage.
Damit wir unserem Server etwas Gutes tun ist es wichtig, dass unser launcher noch vor Spielstart
eine Datei überprüft. In diesem fall "rev_Life.Altis.pbo" die aktuelle Version liegt immer auf unserem Webserver und kann von jedem gedownloadet werden.
Mein vorhaben ist es das unser launcher anhand einer lifepbo_md5.txt datei, die auf dem server liegt.
Die lifepbo_md5.txt datei auf dem lokalen Rechner prüft. Sollten die MD5 werte anders, als auf dem Server sein so downloadet er die aktuelle rev_Life.Altis.pbo und lifepbo_md5.txt herunter und löscht die alten datein vom System.
Was ich bis jetzt schon fertig habe ist das der Benutzer das Verzeichnis auswählen kann, wo die lifepbo_md5.txt und rev_Life.Altis.pbo auf dem lokalen Rechner liegt.
Denn noch habe ich gerade kein plan wie ich das realisieren soll.
Es wäre nett wenn mir wieder jemand einen denk Anstoß geben könnte oder mir schreiben könnte wonach ich suchen soll.
Mit freundlichen Grüßen
Kevin
So ein WebServer liefert nicht nur stumpf Dateien aus, sondern kann auch recht intelligent arbeiten.
Wenn du z.B. einen GET Request absetzt mit
http://example.com/files/rev_Life.Altis.pbo?md5=a3cca2b2aa1e3b5b3b5aad99a8529074
dann könnte der, wenn der Hash-Wert nicht passt, die Datei zurückliefern und wenn die passt, dann gibt es ein 204 (No Content) zurück.
Hallo Sir Rufo und danke für deine antwort.
das würde dann bedeuten das ich nur die rev_Life.Altis.pbo auf den server ziehen muss. ?
und mit ?md5=a3cca2b2aa1e3b5b3b5aad99a8529074 kann der dann denn md5 wert der datei abfragen ?
dann müsste ich aber immer wieder das programm updaten oder ? wenn es eine neue version gibt
könntest du mir das villeicht an hand eines beispiels erklären. ?
ich bin erlich gesagt noch recht neu 😃
Nein, das ist Serverlogik, die Du programmieren musst.
ASP.NET, NodeJS oder PHP sind solche Technologien, mit denen man sowas umsetzt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt
kannst du mir eventuell hilfreiche links dazu posten. ?
oder sollte diese seite ausreichen:
https://msdn.microsoft.com/de-de/library/456dfw4f(v=vs.110).aspx
Grundsätzliche Vorgehensweise am Client:
204 No Content
oder die aktuelle Datei, die der Client dann lokal speichert.Diese Logik ist immer gleich und braucht nicht verändert werden.
Hey 😃 noch eine kurze frage
INIFile verzeichnis = new INIFile("settings.ini", true);
string ver = verzeichnis .GetValue("MPMissionsCache", "Verzeichnis");
testtest.Text = ver;
WebClient Client = new WebClient();
Client.DownloadFile($"http://www.blabla.net/launcher/map/ver.txt", $@"{ver}datei.txt");
edit:
Ich bekomme immer nur die fehlermeldung das auf denn ordner nicht zugegriffen werden kann.
Fehlermeldung:
UnauthorizedAccessException: Der Zugriff auf den Pfad "C:\Users?\Desktop\Neuer Ordner (2)" wurde verweigert.
Das erste, was auffällt: wieso benutzt Du noch Ini-Dateien für Konfigurationen? Ini-Dateien wurden schon vor Jahren, Jahrzehnten durch XML ersetzt.
Bist Du Dir hier auch sicher, dass Du nur einen Dateinamen und keinen Pfad angeben musst...?
Aber die Exception is doch klar: Du hast kein Zugriff.
Was ist jetzt Deine Frage?
Ansonsten: [Artikel] Debugger: Wie verwende ich den von Visual Studio?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Auch hier muss man wieder fragen, warum holst du eine Datei vom WebServer?
Der WebServer kann auch Informationen liefern, wie z.B. eine Versionsnummer, oder per XML/JSON ein komplexeres Gebilde.
Da kannst du dir den gesamten Prozess mit speichern der Datei, lesen der Datei, parsen des Inhalts komplett sparen.
Auch hier muss man wieder fragen, warum holst du eine Datei vom WebServer?
Der WebServer kann auch Informationen liefern, wie z.B. eine Versionsnummer, oder per XML/JSON ein komplexeres Gebilde..
Danke erst mal das ihr versucht mir zu helfen. die antwort darauf ist villeicht bescheuert.
aber wenn ich erlich bin habe ich kein plan wie ich das anstellen soll.
ich bin sozusagen anfänger und hab immer nur kleine sachen gemacht.
Das erste, was auffällt: wieso benutzt Du noch Ini-Dateien für Konfigurationen?
Das Problem hat sich zum glück schon erledigt. 😃
wieso ich das in die ini speicher ? das wurde so von der community entschlossen 😃
@ Sir Rufo
ich würde das echt gerne so machen wie du es mir vorschlägst. allerdings fehlen mir hierzu einfach die erfahrung , Kenntnisse
Mit freundlichen Grüßen
Kevin
Wir haben alle mal klein angefangen; da muss man dann eben Zeit in Tutorials und Co stecken.
Aber das kriegst Du schon hin!
Wenn man es aber gar nicht erst versucht bzw. sich zu informieren, dann kann man natürlich auch keine Erfahrung sammeln
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
ich würde das echt gerne so machen wie du es mir vorschlägst. allerdings fehlen mir hierzu einfach die erfahrung , Kenntnisse
Dann musst Du es lernen. Dafür gibt es im Netz eine Menge Tutorials. Wenn man keine Lust auf lesen hat, kann man sich auch Video-Tutorials bei youtube anschauen.
Na lust habe ich schon das problem ist einfach das ich nicht weiß wonach genau was die richtigen und was die falschen informationen sind. 😃
aber nachdem ich jetzt denn ganzen tag mit Microsoft verbracht habe
habe ich auch eine lösung gefunden. 😃
jetzt bleibt noch eine frage offen die ich auch am googlen bin 😛
string path2 = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
damit komme ich ja ins userverzeichnis ich müsste aber in folgendes verzeichnis
C:\Users\Benutzername\AppData\Local\Arma 3\MPMissionsCache
string path2 = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile, @"\rev_Life.Altis.pbo");
und so geht es aufjedenfall nicht 😦
wie kann ich das denn anhängen ? auf microsoft finde ich nicht wirklich eine lösung.
Ein Blick in die Doku von den SpecialFoldern hätte genügt. 😉
Was Du willst ist
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
Jedenfalls zeigst Du das hier; Du willst ja in AppData Local und nicht ins Profil laut Beschreibung.
Und ein GetFolderPath kann natürlich keine Pfade verbinden.
var folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
var localName = "DeinAppName";
var fileName ="rev_Life.Altis.pbo";
var fullName = Path.Combine(folder, localName, fileName);
Eine Datei sollte nicht einfach so im Userprofil liegen, denn da gehört sie nicht hin.
Sie gehört immer in einen Ordner, dem man einer Anwendung zuweisen kann.
Vielleicht solltest Du ein paar Minuten pause machen.
Du vermischt viel zu viel und gehst nicht wirklich strukturiert an die Sache.
Mach ne Pause; das tut wahrscheinlich mal gut.
Und dann machst am besten einfach mal ein C# Tutorial. Weil einfach dieses Rumprobieren und Stochern; das wird Dich nicht weiter bringen.
Das hatten wir hier schon oft genug und endet dann meistens damit, dass die Leute keine Lust mehr haben, weil sie nicht weiter kommen - und dann aufhören.
Und wir können auch am Ende nicht Dein Code schreiben 😉
PS: wie schon paar Mal gesagt; mit "geht nicht" alleine können wir nichts anfangen.
Hier war es einfach offensichtlich.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hey ich danke dir.
und ja du hast wohl recht ich sollte wirklich mal eine pause machen.
ich sitze schon seit heute morgen hier dran. ( ist ja schon dunkel draußen 😛 )
ich werde mir jetzt erst mal abendbrot machen und mich morgen an die sache machen.
vielen lieben dank und einen schönen abend noch
Wichtig ist:
Wenn man in C# Programme für Windows erstellen möchte, dann muss man sich sowohl mit C# als auch mit Windows auseinandersetzen!
Dieses als auch wird gerne übersehen 😁