C# Update Funktion für Anwendung

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo Leute,
mal ne Frage...

Ich wollte bei meiner Anwendung ne Update-Funktion einbauen. Da das Tool nicht sehr groß ist (350 kb) dachte ich daran, ein weiteres Progrämmchen zu schreiben, das eben überprüft ob die Version auf dem Server neuer ist als die bereits verfügbare.

Wenn ja, dann wird diese runtergeladen und die lokale einfach durch die runtergeladene überschrieben (bzw. ersetzt).

Theoretisch ja kein Ding. Jetzt kommt aber das Problem. Ich dachte zuerst daran einfach den Hash von der lokalen Datei und den Hash von der Datei aufm Webserver zu prüfen und diese zu vergleichen, aber da gibt es ein Problem...

Wie zum Teufel kann ich den Hashwert der Datei auf dem Server raußfinden? FileInfo nimmt ja keine URI an. Auch Webclient.GetHashCode() gibt nen anderen Wert zurück als den der Datei!!

Hat jemand ne Idee wie ich das anstellen könnte?

Mir würde auch reichen die Versionsnummer zu überprüfen aber auch das geht nicht mit einer URI. Momentan weiß ich nicht mal wie und wo ich überhaupt ansetzen soll um irgendwelche Infos von der Datei auf dem Server zu bekommen.


Ich will schließlich nicht die ganze Datei erst runterladen müssen, dann prüfen, vergleichen und wieder löschen falls die Version nicht neuer ist!!

Danke schon mal für die Hilfe.
 
Du legst auf deinem Server ein XML File mit der jeweils aktuellen Version ab, prüfst beim Start der Anwendung was neuer ist. Wenn die Serverversion neuer ist lädst du das neuere MSI package runter und startest den Installer aus deiner Anwendung, dann schließt du deine Anwendung.

Wichtig dabei ist das dein MSI Package ein Update erlaubt, bei WIX ist das mit einem Schalter erledigt.
 
Lade doch einfach noch eine txt Datei hoch welche die aktuellste Version beinhaltet, also ein einfacher Text. Die kleine txt Datei kannst du dann laden / öffnen, und mit der lokalen vergleichen. Das geht natürlich auch mit dem hash den du in die txt Datei schreiben könntest, immer den aktuellen dann.

Edit: da war einer schneller, xml geht natürlich auch :)
 
Also wenn du den Hash von der Datei auf dem Server willst, wirst du an runterladen wohl kaum vorbeikommen, außer du schreibst dir ein Script oder nen Service, der auf dem Server läuft und den du von außen ansprechen kannst.

Die einfachste Möglichkeit wäre imo einfach ne Textdatei auf den Server zu packen, wo die aktuelle Versionsnummer drin steht. Die Vergleichst du dann einfach mit der lokalen Version und wenn diese älter ist, wird die neue Version runtergeladen.

Edit: verdammt, gleich 2 waren schneller XD
 
Naja das mit txt und versionsnummer habe ich mir auch schon überlegt. Aber eigentlich war genau das was ich mir ersparen wollte =D
nämlich jedes mal noch extra ein Textfile zu editieren und hochzuladen.

Naja gut wenn ich so nicht drum herum komme, dann bleibt mir wohl wirklich keine Wahl. Danke vielmals. Immerhin weiß ich nun, dass ich ohne nen extra Service auf dem Server nicht an den Hashcode von dem File ran komme.

Werd wohl doch die Textfile-Variante nehmen =D

Danke nochmals.
 
Hi,

schau die mal das ClickOnce Setup von .Net an. Das kann genau sowas.
Wenn ich mich nicht ganz täusche auch von entfernten Webservern aus.
War oder ist eigentlich für Unternehmensnetzwerke gedacht.

Gruß
 
du kannst ja ein programm schreiben welches den hash in eine xml-datei schreibt, dann musst du immer nur die beiden dateien auf den server schieben.
Oder die dateien direkt mit dem Programm auf den server hochladen?

MfG
Damon
 
Ja ich habs mir schon angeguckt das ClickOnce. Wäre ja eigentlich fast ideal, aber das Problem...
ich nutze die Express Version von VS und da ist es eben stark eingeschränkt der Publishing Assistent!

Bei der Installation kann ich nicht mal das Verzeichnis auswählen wohin es das Programm installieren soll dann. Auch verschiedene Einstellungen sind bei der Express Variante nicht dabei =(
 
Echt nicht? Aber dann hab ich ja irgendwann 100 Ordner aufm Laufwerk weil die ClickOnce ständig nen neuen Ordner beim Update erstellt.
 
Zurück
Oben