Wie erstelle ich eine Updatefunktion in c#?^^

11/10/2015 23:02 b0sted#1
Hi. Wie erstelle ich eine UpdateFunktion in c#? Würde mich sehr über eine Hilfe freuen. Ich glaube ihr wisst was ich meine^^.
11/11/2015 02:56 Mikesch01#2
public function update() { .. }

:D Nein genau wissen wir nicht, was du meinst.
11/11/2015 07:17 _ᴋush##3
Schätze mal du hast ein Programm und brauchst eine Funktion, welche regenmäßig nach Updates sucht? :D
11/11/2015 10:03 i0N#4
Du willst dein Programm durch das Programm selbst updaten lassen? Gibt zahlreiche vorgefertigte Klassen dafür, einfach Google nach "c# auto updater" befragen.

Prinzipiell benötigst du einen Server bzw. einen Webhost auf dem du die Updates und Versions-Infos ablegen kannst. In C# definierst du im Programm die derzeitige Version die der Nutzer hat. Auf dem Server wird dann abgefragt, was die neuste Version ist. Ist diese höher, wird die neuste Version zum Upload angeboten.

Pseudocode
int ver = 3;
int newVer = Int32.Parse(DownloadString("http://meinserver.com/aktuelleversion.txt"));
if(newVer > ver) DownloadFile("http://meinserver.com/meintool_" + newVer + ".exe");
11/11/2015 15:26 SangerHa#5
Danke n8xtdev ^^. Hastn Thanks von mir :D
11/11/2015 16:08 Nanoxx™#6
php -> Echo (MD5_VON_X.exe auf webserver)


update -> httprequest -> php
(if LocalMD5 != ServerMD5)
{
Update();
}
else
{
Run();
}


so in etwa.... ist leicht zu verstehen und funktioniert gut!
11/12/2015 15:25 Ih¢sãs123#7
Quote:
Originally Posted by dokayhan View Post
Hi. Wie erstelle ich eine UpdateFunktion in c#? Würde mich sehr über eine Hilfe freuen. Ich glaube ihr wisst was ich meine^^.
Grundsätzlich will ich erstmal wissen was du Updaten möchtest. Willst du nur deine Anwendung updaten können oder nur Dateien patchen können?

Für den 1. Fall würde ich eine Example.exe und eine update.exe schreiben, die Example.exe ruft die update.exe auf, wenn ein update verfügbar ist schließt es kurz die Example.exe, ersetzt die alte Example.exe mit der neuen, startet die Example.exe und beendet die update.exe (ist jetzt der Fall wenn man mit dem alten Programm nicht weiter arbeiten sollte... für neuere würde ich einen Updateinterval einbauen der nachfragt, sowie bei den adobe-Produkten)

Für den 2. Fall würde ich gepackte Dateien auf den Server legen die ID increased abgelegt werden, du musst natürlich Clientside die ID ebenfalls abspeichern, du gleichst beide IDs ab und lässt das Packet runterladen welches ClientID+1 ist und entpackst es, zählst deinen Counter hoch... bis der Patch gleichgezogen ist.

Vielleicht poste ich noch etwas Code aus meinen Projekten...
11/20/2015 13:35 -Venom'#8
Ich stand letztens auch vor dieser Frage.
Ich habe es mir relativ einfach gemacht.

1. Programm Starten und Version über DownloadString prüfen.
Die neue Version kannst du in eine .txt Datei schreiben.
Beispiel:
Code:
1.0.1
Code:
Code:
static string VERSIONS_CHECK = "http://DeineDomainOderFTP/version.txt";
static string Reply;
static string Version = "1.0.0";
static string NEW_VERSION = "http://DeineDomainOderFTP/NEW.exe";
static string UPDATE_FOUND = "Update available! \nDo you want to download the update now ?";
static string UPDATE_READY = "New version has been downloaded. \nDo you want to start the new version now ?";

  private void CheckUpdate()
        {
            WebClient DownloadString = new WebClient();
            Reply = DownloadString.DownloadString(new Uri(VERSIONS_CHECK));

            if(Reply == Version)
            {
                return;
            }
            else
            {
                var result = MessageBox.Show(UPDATE_FOUND, "", MessageBoxButtons.OKCancel);
                if (result == System.Windows.Forms.DialogResult.OK)
                {
                    DownloadString.DownloadFileAsync(new Uri(NEW_VERSION), @Application.StartupPath + "\\" + "NEW.exe");
                    DownloadString.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadString_DownloadCompleted);
                }
                else
                {
                    WindowState = FormWindowState.Normal;
                }
            }
        }

        private void DownloadString_DownloadCompleted(object sender, AsyncCompletedEventArgs e)
        {
            var result = MessageBox.Show(UPDATE_READY, "", MessageBoxButtons.OKCancel);
            if(result == System.Windows.Forms.DialogResult.OK)
            {
                Process.Start(@Application.StartupPath + "\\" + "Updater.exe");
                Application.Exit();
            }
            else
            {
                Application.Exit();
            }
        }
In Load Form1 oder halt in der Load Funktion deiner Form
Code:
CheckUpdate()
aufrufen.


Danach lasse ich eine Updater.exe starten die den rest regelt wie Names Change und Programm neu Starten.

Code:
namespace Updater
{
    class Program
    {
        static void Main(string[] args)
        {
           if(File.Exists("ProgrammName.exe"))
           {
               File.Delete("ProgrammName.exe");
               File.Move("NEW.exe", "ProgrammName.exe");

               Console.Write("Datei wird nun gestartet. Bitte Warten");
               Console.Write("Datei wird nun gestartet. Bitte Warten");
               Console.Write("Datei wird nun gestartet. Bitte Warten");
               Console.Write("Datei wird nun gestartet. Bitte Warten");
               Process.Start("ProgrammName.exe");
           }
           else
           {
               File.Move("NEW.exe", "ProgrammName.exe");
           }

        }
    }
}
Sollte jemand Fragen zum Skript haben meldet euch einfach bei mir.
Personen die C# Lernen möchten sind auch gerne gesehen .
11/20/2015 15:51 tyurderi#9
[Only registered and activated users can see links. Click Here To Register...]