[FRAGE] Update funktion

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [FRAGE] Update funktion

      Nunja , da ich ein C# Noob bin wollte ich euch mal fragen ob ihr meine 2 Fragen beantworten könnt:

      1.Frage:
      Also ich arbeite momentan an ein Projekt , welches sich auf Knopfdruck updaten soll (falls es eine verfügbare gibt),
      bloß habe ich keine Ahnung wie ich das anstellen soll. Deswegen frage ich euch ob ihr Ahnung habt wie ich so etwas
      machen könnte!

      2.Frage:
      Ich möchte dass man auf Knopfdruck die Neuz.exe startet , wobei man den Pfad vorher in einer Textbox angeben muss,
      damit sie startet! Hoffe ihr könnt mir helfen!
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Zu 1.
      Du könntest eine Textdatei auf deinem FTP Server legen.Da kommt z.B. 3 rein.
      Und in den Client kommt auch eine Textdatei mit einer Zahl z.B. 2.
      Dann muss dein Programm überprüfen ob die Zahl im Client kleiner als die auf dem FTP ist ,und wenn das der Fall ist kann dein Programm die benötigten Dateien downloaden .
      So war die Theorie ,jetzt musst du es nur noch umsetzen ;D
    • Habe mal eben schnell ne Console Application als Updater gemacht...
      Es wird alles drinne Erklärt(hinter den //). Es ist nicht getestet(Keine zeit mehr D:) sollte aber klappen.
      Wichtig ist nur das du im Projekt Manager(Rechts) unter References einen Rechtsklick machst und Reference hinzufügen/add machst. Dort suchst du nun unter dem Reiter ".NET" nach "System.Windows.Forms".
      Sollte es noch Probleme geben frag einfach.

      Quellcode

      1. using System;
      2. using System.Collections.Generic;
      3. using System.Linq;
      4. using System.Text;
      5. using System.Net;
      6. using System.IO;
      7. using System.Windows.Forms;
      8. namespace Test
      9. {
      10. class Program
      11. {
      12. static void Main(string[] args)
      13. {
      14. try // Wichtig! Sollte es einen Fehler geben wird dieser ausgegeben
      15. {
      16. WebClient request = new WebClient(); // Ein Webclient zum downloaden wird deklariert
      17. request.Credentials = new NetworkCredential("Username", "Passwort"); // Es werden Nutzername und Passwort dem WebClient gegeben
      18. byte[] Data = request.DownloadData("Pfad zur VersionsDatei"); // Die VersionsDatei wird runtergeladen(bsp. Link: ftp://test.bplaced.net/Update/version.txt)
      19. FileStream fs = new FileStream("Dateiname auf Festplatte", FileMode.Create); // Wie die Datei auf der Festplatte heißen soll(bsp. version.txt)
      20. fs.Write(Data, 0, Data.Length); // Datei wird erstellt
      21. fs.Close(); // FileStream wird geschlossen
      22. StreamReader srVersion = new StreamReader("VersionsDatei"); // VersionsDatei wird geöffnet um die Version auszulesen
      23. string AktVersion = srVersion.ReadLine(), CurVersion = Application.ProductVersion.ToString(); // AktVersion = Aktuellste Version, wird aus der VersionsDatei gelesen;CurVersion = Current Version, wird aus der Application gelesen
      24. if (AktVersion != CurVersion) // Es wird überprüft ob die Versionen sich gleichen
      25. { // Wenn nicht...
      26. Console.WriteLine("Neue Version vorhanden.");
      27. Console.WriteLine("Neue Version wird gedownloadet...");
      28. byte[] Data1 = request.DownloadData("Pfad zur Datei"); // Pfad zur neuen Datei(bsp. Link: ftp://test.bplaced.net/Update/Files/test.exe)
      29. FileStream fs1 = new FileStream("Pfad zur Datei", FileMode.Create); // Wie soll die Datei auf der Festplatte heißen(Vorsicht: Die Datei sollte nicht vorhanden sein! Also anderst nennen als die zu patchende Datei!)
      30. fs.Write(Data1, 0, Data1.Length); // Datei wird erstellt
      31. fs.Close(); // FileStream wird geschlossen
      32. File.Copy("Pfad zur Datei", "Pfad zur alten Datei", true); // Die vorhin erstellte Datei wird umbenannt/verschoben und die alte Datei wird überschrieben(Wichtig! Das "true" am Ende darf nicht fehlen!)
      33. File.Delete("Pfad zur Datei"); // Die vorhin runtergeladene Datei wird gelöscht(da diese noch vorhanden ist)
      34. Console.WriteLine("Updaten erfolgreich!");
      35. Console.ReadKey(); // Es wird auf eine Eingabe gewartet
      36. }
      37. else if (AktVersion == CurVersion)
      38. { // Wenn doch...
      39. Console.WriteLine("Neuste Version vorhanden");
      40. Console.ReadKey(); // Es wird auf eine Eingabe gewartet
      41. }
      42. }
      43. catch (Exception ex)
      44. {// Sollte es einen Fehler geben...
      45. Console.Write(ex.Message); // Wird diese Ausgegeben
      46. Console.ReadKey(); // Und auf eine Eingabe gewartet...
      47. }
      48. }
      49. }
      50. }
      Alles anzeigen
      PS: Application version änderst du unter:
      Project->"Projektname" Properties->Assembly Information...->Assembly Version und File Version in deine Version ändern.

      Edit: @Vorposter wird nicht einfach gehen da es in C# keine My Funktion gibt ;)
    • ich kann zwar kein c# aber hab dir mal das hier gecdet
      1. du brauchst ne 2te app mit 2 progressbars
      da kommt dann der code rein

      Quellcode

      1. using System;
      2. using System.Collections.Generic;
      3. using System.ComponentModel;
      4. using System.Data;
      5. using System.Drawing;
      6. using System.Linq;
      7. using System.Text;
      8. using System.Windows.Forms;
      9. using System.Net;
      10. using System.Diagnostics;
      11. using System.IO;
      12. namespace Update
      13. {
      14. public partial class Form1 : Form
      15. {
      16. public Form1()
      17. {
      18. InitializeComponent();
      19. }
      20. private void Form1_Load(object sender, EventArgs e)
      21. {
      22. StartDownload("Hier der name der datei die geupdatet wird", "Hier der Pfad zu der Txt datei mit den Updates");
      23. }
      24. private void StartDownload(String Appname, String DLLink)
      25. {
      26. webClient1.DownloadFileAsync(new Uri(DLLink), Application.StartupPath &"List.txt");
      27. String[] Lines = webClient1.DownloadFileAsync(new Uri(Splittet[1]), Splittet[0]);;
      28. int i;
      29. progressBar2.Maximum = Lines.Count-1;
      30. for (i = 0; i > Lines.Count; i++)
      31. {
      32. String[] Splittet = Lines[i].Split(";");
      33. if (File.Exists(Application.StartupPath & Splittet[0]))
      34. {
      35. FileInfo fi = new FileInfo(Application.StartupPath & Splittet[0]);
      36. if (fi.Length != Splittet[2])
      37. {
      38. fi.Delete();
      39. webClient1.DownloadFileAsync(new Uri(Splittet[1]),Application.StartupPath & Splittet[0]);
      40. }
      41. }
      42. else
      43. {
      44. webClient1.DownloadFileAsync(new Uri(Splittet[1]),Application.StartupPath & Splittet[0]);
      45. }
      46. progressBar2.Increment(1);
      47. }
      48. File.Delete(Application.StartupPath & "List.txt");
      49. Process p = new Process();
      50. p.StartInfo.FileName = Appname;
      51. }
      52. private void webClient1_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
      53. {
      54. progressBar1.Value = e.ProgressPercentage;
      55. }
      56. }
      57. }
      Alles anzeigen

      könnte fehler geben c# erkennt mein backslash nicht
      die liste die oben erwähnt wuder die muss auf nem Webserver liegen die muss so aufgebaut sein
      speicherpfad der update datei; downloadlinkderdatei/datei ;GrösserderdateiinBytes

      also z.b.
      test.txt;test.kilu.de/test.txt ;50
    • Danke @ichbinniemand und g0dskeks...
      Nun bräuchte ich noch zip entpacker aber das ist erstmal egal

      Also habe nun versucht den Neuz Dateipfad aus der Textbox neuz_pfad auslesen zu lassen mit diesem Script:
      Process.Start(neuz_pfad+"Neuz.exe","sunkist");
      Doch dann startet es nicht und Visual C# sagt dass es das Programm nicht
      gibt. Benutze ich aber:
      Process.Start("X:\\lalilu\\blabli\\Neuz.exe","sunkist");
      funktioniert es , und das Programm startet.

      Habt ihr ne Idee was falsch ist?

      /EDIT: Habe .Text am Ende vergessen wie dumm von mir... Nun suche ich nur nach einer Methode des entzippen ;)