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

У меня была точно такая же проблема, но в приложении Angular2, и эта статья просто решила его: https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1 # .p6gra5eli

Резюме статьи:

  1. Установка библиотеки npm install lodash --save
  2. Добавить определения типов для Lodash tsd install underscore
  3. Включая скрипт
  4. Настройка SystemJS System.config({ paths: { lodash: './node_modules/lodash/index.js'
  5. Импорт модуля import * as _ from ‘lodash’;

Надеюсь, это может быть полезно и для вашего случая

23
задан pek 29 November 2008 в 12:37
поделиться

9 ответов

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

9
ответ дан Matt Hamilton 29 November 2019 в 02:22
поделиться

У нас есть коммерческий продукт с открытым исходным кодом: wyBuild & amp; wyUpdate . Он имеет возможность исправления и очень прост в использовании.

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

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

Но, если хотите, проголосуйте за меня.

16
ответ дан Wyatt O'Day 29 November 2019 в 02:22
поделиться

Приблизительно 3-4 года назад я опубликовал пример, который находится вне приложения, если обновление обнаруживается, приложение звонит, updater ответ закрывается, то обновления сделаны, и перезапуски приложения.

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

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

2
ответ дан Mitchel Sellers 29 November 2019 в 02:22
поделиться

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

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

2
ответ дан Jason Short 29 November 2019 в 02:22
поделиться

Как начальная точка для прокрутки Вашего собственного, на это, вероятно, стоит посмотреть статья Alex Feinman о MSDN, наделенном правом, "Создавая Самообновление Приложений с.NET Компактная Платформа".

2
ответ дан ctacke 29 November 2019 в 02:22
поделиться

Напиши свое.

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

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

1
ответ дан MagicKat 29 November 2019 в 02:22
поделиться

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

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

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

1
ответ дан stombeur 29 November 2019 в 02:22
поделиться

В Вашем файле 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 и перезапускает приложение.

1
ответ дан Timothy Carter 29 November 2019 в 02:22
поделиться

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

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

1
ответ дан Tristan Warner-Smith 29 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: