Was ist der beste Weg für eine Anwendung .NET WinForms selbst zu aktualisieren, ohne Clickonce zu verwenden?

StackOverflow https://stackoverflow.com/questions/150994

Frage

Aus technischen Gründen kann ich nicht Clickonce Auto-Update meine .NET-Anwendung und deren Baugruppen verwenden. Was ist der beste Weg, die automatische Aktualisierung in .NET zu behandeln?

War es hilfreich?

Lösung

ich glaube, die Updater Application Block etwas eines Vorläufers war zu Clickonce. Könnte eine Untersuchung wert. an ihrem Quellcode suchen könnte ausreichen, um einige Ideen zu wecken.

Andere Tipps

Wir haben ein Produkt, das Gewerbe / Open Source ist: wyBuild & wyUpdate . Es hat Patchen Fähigkeit und ist tot einfach zu bedienen.

Edit: Ich bin immer in die negativen Zahlen niedergestimmt, aber mein Beitrag war nicht nur eklatante Verkauf. Unser Updater, wyUpdate, ist Open Source, in C # geschrieben und steht unter der BSD-Lizenz lizenziert.

dachte ich, es könnte jemand versuchen, einen Updater von Grund auf neu bauen helfen, das .NET Framework.

Aber, mich überstimmen, wenn Sie müssen.

Über 3-4 Jahren veröffentlichte ich ein Beispiel, das außerhalb der App sitzt, wenn ein Update erkannt wird, die App ruft die Aktualisierungs ans heruntergefahren, dann werden die Aktualisierungen durchgeführt, und die App neu gestartet wird.

ich auf der alten GotDotNet Website am Beispiel veröffentlicht ... Ich werde versuchen, es zu finden.

Es funktionierte perfekt und dauerte etwa 1-2 Stunden zu schreiben.

Indigo Rose hat ein Produkt namens Trueupdate, dass auch dies für Sie tut. Ich habe sie in der Vergangenheit von beiden verwalteten und nicht verwalteten Anwendungen eingesetzt. Es ist im Grunde eine Datei, die Sie auf Ihrer Seite ein (http, ftp, was auch immer Sie mögen). Dann rufen Sie eine Client-Seite EXE nach Updates zu suchen. Die Updates Datei gezogen und hat Logik zu erkennen, welche Version auf dem Client (Ihre Wahl, DLL-Erkennung, Registrierungsschlüssel lesen, etc.) ist. Dann wird es den entsprechenden Updater für sie finden und die Datei zur Ausführung herunterladen. Es funktioniert gut durch Proxies als auch.

Das einzige, was sie nicht tun, ist eigentlich die Patches für Sie bauen. Sie müssen dies manuell tun, oder mit einem anderen Produkt, das sie haben. Es ist eine commcerial Lösung und funktioniert recht gut, obwohl, wenn Sie es brauchen.

Als Ausgangspunkt für Ihre eigenen Rollen, ist es wahrscheinlich lohnt ein Blick auf Alex Feinman Artikel über MSDN dem Titel „Erstellen von Selbst Aktualisieren von Anwendungen mit dem .NET Compact Framework“.

Schreiben Sie Ihre eigene.

Ich habe gehört, dass sie etwas schwierig sind das erste Mal zu schreiben, aber danach wird es einfach.

Da ich nicht ein noch geschrieben haben (obwohl seine auf meiner Liste), habe ich Ihnen einige der Dinge geben kann, dass ich gedacht haben. Pflegen genaue DLL-Versionen, da dies für aktualisierend wichtig ist. Und stellen Sie sicher, dass der Updater selbst aktualisieren kann.

In Ihrer Datei Program.cs etwas tun, wie folgt aus:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Update();
        Application.Run(new Form1());
    }

    private static void Update()
    {
        string mainFolder;
        string updateFolder;
        string backupFolder;

        foreach (string file in
            System.IO.Directory.GetFiles(updateFolder))
        {
            string newFile = file.Replace(
                updateFolder, mainFolder);

            if (System.IO.File.Exists(newFile))
            {
                System.IO.File.Replace(file, newFile, backupFolder);
            }
            else
            {
                System.IO.File.Move(file, newFile);
            }
        }
    }

Zusätzlich kann es gemacht rekursive wird Verzeichnisstruktur bei Bedarf zu holen. Auf diese Weise können Sie jede DLL in Ihrem Projekt aktualisieren; alles in der Tat außerhalb des Haupt .exe. Dann woanders in Ihrer Anwendung können Sie behandeln die Dateien von Ihrem Server bekommen (oder wo auch immer), die aktualisiert werden müssen, setzen Sie dann in der updateFolder und die Anwendung neu starten.

Bei einem Projekt vor langer Zeit, mit .NET Compact Framework 1.0, schrieb ich eine automatische Aktualisierung der Anwendung. Wir verwendeten SQLCE CAB Bereitstellungsfeature die Dateien auf das Gerät zu erhalten (Sie würden jetzt Sync Framework verwenden), und wir hatten eine separate exe, die das Entpacken der CAB tat, und die Aktualisierung der Dateien.

Ein Update würde so gehen: der Benutzer aufgefordert werden würde, um eine Taste zu aktualisieren, klicken Sie auf und aus der UI-Anwendung fallen. Der Updater exe übernehmen würde, nutzen Sie die CAB-Datei vom Server, Backup der aktuellen DLLs und die CAB-Datei mit wceload entpacken. Die Benutzeroberfläche würde dann neu gestartet werden, und wenn es scheitert, würde das Update rückgängig gemacht. Dies ist immer noch ein interessantes Szenario auf kompakte Geräte, aber es gibt bessere Tools jetzt als nur sqlce.

ich aussehen würde sicherlich bei Updater Block und Sync Framework dies zu implementieren, wenn Clickonce ist keine Option. Aber ich vermute, Sie müssen noch eine separate ausführbare Datei benötigen, da die DLLs Sie überschrieben werden soll wahrscheinlich während durch eine exe in Gebrauch Datei gesperrt, wie einer der vorherigen Antworten schon gesagt.

ich meine eigene autoupdater schrieb, die autoupdater verwendet eine gemeinsame Konfigurationsdatei der Anwendung, die URLs enthält aktuelle Versionen zum Download von / überprüfen, ob es aktualisiert werden muss.

Auf diese Weise können Sie den Updater ausführen, die entweder die App aktualisiert oder nicht, läuft dann die Anwendung, die im Rahmen des normalen Betriebs überprüft, um einen aktualisierten Updater und Patches.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top