Laden...

Per MD5 Dateien vom Webserver und Local Computer überprüfen

Erstellt von user24342 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.416 Views
U
user24342 Themenstarter:in
22 Beiträge seit 2014
vor 6 Jahren
Per MD5 Dateien vom Webserver und Local Computer überprüfen

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

D
985 Beiträge seit 2014
vor 6 Jahren

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.

U
user24342 Themenstarter:in
22 Beiträge seit 2014
vor 6 Jahren

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 😃

16.833 Beiträge seit 2008
vor 6 Jahren

Nein, das ist Serverlogik, die Du programmieren musst.
ASP.NET, NodeJS oder PHP sind solche Technologien, mit denen man sowas umsetzt.

U
user24342 Themenstarter:in
22 Beiträge seit 2014
vor 6 Jahren

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

D
985 Beiträge seit 2014
vor 6 Jahren

Grundsätzliche Vorgehensweise am Client:

  • Erzeuge den MD5 Hash der lokalen Datei (wenn es die nicht gibt, dann auch kein Hash)
  • Frage den Server nach der Datei (mit oder ohne Angabe des Hashs)
  • Der Server liefert jetzt entweder 204 No Content oder die aktuelle Datei, die der Client dann lokal speichert.

Diese Logik ist immer gleich und braucht nicht verändert werden.

U
user24342 Themenstarter:in
22 Beiträge seit 2014
vor 6 Jahren

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.

16.833 Beiträge seit 2008
vor 6 Jahren

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?

D
985 Beiträge seit 2014
vor 6 Jahren

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.

U
user24342 Themenstarter:in
22 Beiträge seit 2014
vor 6 Jahren

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

16.833 Beiträge seit 2008
vor 6 Jahren

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

H
523 Beiträge seit 2008
vor 6 Jahren

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.

U
user24342 Themenstarter:in
22 Beiträge seit 2014
vor 6 Jahren

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.

16.833 Beiträge seit 2008
vor 6 Jahren

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.

U
user24342 Themenstarter:in
22 Beiträge seit 2014
vor 6 Jahren

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

D
985 Beiträge seit 2014
vor 6 Jahren

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 😁