Подтвердить что ты не робот

Какой лучший способ для .NET winforms приложения обновить себя, не используя ClickOnce?

По техническим причинам я не могу использовать ClickOnce для автоматического обновления моего приложения .NET и его сборок. Каков наилучший способ обработки автоматического обновления в .NET?

4b9b3361

Ответ 1

Я думаю, что Блок приложений Updater был чем-то вроде предшественника ClickOnce. Возможно, стоит исследовать. Глядя на его исходный код может быть достаточно, чтобы вызвать некоторые идеи.

Ответ 2

У нас есть продукт, который коммерчески/с открытым исходным кодом: wyBuild и wyUpdate. Он обладает способностью к исправлению и является простым в использовании.

Изменить: меня проголосовали за отрицательные числа, но мой пост был не просто вопиющей продажей. Наш updater, wyUpdate, является открытым исходным кодом, написанным на С# и лицензированным по лицензии BSD.

Я думал, что это может помочь любому, кто пытается создать обновитель с нуля, используя платформу .NET.

Но, проголосуйте, если вы должны.

Ответ 3

Около 3-4 лет назад я опубликовал пример, который находится вне приложения, если обнаружено обновление, приложение вызывает обновление и завершение обновления, затем обновления завершаются, и приложение перезапускается.

Я опубликовал пример на старом сайте GotDotNet... Я должен попытаться найти его.

Он работал идеально и занял около 1-2 часов, чтобы написать.

Ответ 4

Indigo Rose имеет продукт под названием TrueUpdate, который также делает это для вас. Я использовал их в прошлом как из управляемых, так и неуправляемых приложений. Это в основном файл, который вы кладете на свой сервер (http, ftp, все, что вам нравится). Затем вы вызываете клиентскую сторону EXE для проверки обновлений. Файл обновлений вытаскивается и имеет логику, чтобы определить, какая версия находится на клиенте (ваш выбор, обнаружение DLL, чтение ключа реестра и т.д.). Затем он найдет подходящий файл обновления для него и загрузит файл для выполнения. Он хорошо работает и с прокси.

Единственное, чего они не делают, это на самом деле создать патчи для вас. Вы должны сделать это вручную или с другим продуктом, который у них есть. Это коммерческое решение и работает достаточно хорошо, если вам это нужно.

Ответ 5

В качестве отправной точки для сворачивания собственных, вероятно, стоит посмотреть статью Алексея Фейнмана по MSDN, озаглавленную "Создание самонастраивающихся приложений с помощью .NET Compact Framework".

Ответ 6

Напишите свой собственный.

Я слышал, что их сложно записать в первый раз, но после этого все становится проще.

Так как я еще не написал (хотя и в моем списке), я могу дать вам некоторые из вещей, о которых я думал. Поддерживайте точные версии dll, так как это важно для самостоятельного обновления. И убедитесь, что программа обновления может обновить себя.

Ответ 7

В файле Program.cs сделайте что-то вроде этого:

    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);
            }
        }
    }

Кроме того, это может быть сделано рекурсивным, чтобы собрать структуру каталогов, если это необходимо. Это позволит вам обновить любую .dll в вашем проекте; все, фактически, вне основного .exe. Затем в другом месте вашего приложения вы можете иметь дело с получением файлов с вашего сервера (или где-либо), которые необходимо обновить, затем поместить в updateFolder и перезапустить приложение.

Ответ 8

В проекте давно, используя .NET Compact Framework 1.0, я написал приложение для автоматического обновления. Мы использовали функцию развертывания SqlCE CAB для получения файлов на устройстве (теперь вы должны использовать Sync Framework), и у нас был отдельный exe, который делал распаковку CAB и обновлял файлы.

Обновление будет выглядеть так: пользователю будет предложено обновить его, нажать кнопку и выйти из приложения пользовательского интерфейса. Экзаменатор exe возьмет на себя ответственность, доставит файл с сервера, резервное копирование текущих DLL и распакует файл кабины с помощью wceload. Затем пользовательский интерфейс будет перезапущен, и если он не удался, обновление будет отменено. Это по-прежнему интересный сценарий для компактных устройств, но теперь есть лучшие инструменты, чем просто SQL.

Я бы, конечно, посмотрел на блок приложений и рамки синхронизации, чтобы реализовать это, если clickonce не является вариантом. Но я предполагаю, что вам все равно понадобится отдельный исполняемый файл, потому что dll, который вы хотите перезаписать, вероятно, заблокирован файлом во время использования exe, как и один из предыдущих ответов.

Ответ 9

Я написал свой собственный autoupdater, autoupdater использует общий файл конфигурации для приложения, который содержит URL-адреса для загрузки последних версий из /check, если необходимо обновить.

Таким образом вы запускаете программу обновления, которая либо обновляет приложение, либо нет, а затем запускает приложение, которое как часть нормальной работы проверяет обновленный updater и исправляет это.