Squirrel.Windows UpdateManager.GitHubUpdateManager Требуется помощь

Я пытаюсь использовать Squirrel.Windows с моим приложением для установки и автоматического обновления из его репозиториев GitHub. Следуя примеру в

https://github.com/Squirrel/Squirrel.Windows/blob/master/docs/getting-started/1-integrating.md

Я был в состоянии завершить все шаги успешно. Я проверил установку, приложение открывает без проблем. Я обновил и "освободил" его, а локально установленное приложение обновилось, как и ожидалось.

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

После этого я обновил код в своем App.xaml.cs до следующего

public partial class App : Application
{
    protected override async void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        MessageBox.Show(typeof(App).Assembly.GetName().Version.ToString());

        //  Check for application updates
        using (var mgr = UpdateManager.GitHubUpdateManager("https://github.com/Dartvalince/DiscerningEye"))
        {
            await mgr.Result.UpdateApp();
        }
    }

Далее я иду через тот же процесс, что и раньше, создавая nupkg и выполняя команду releasify с Squirrel. Нет проблем здесь, хорошо.

После всего этого я выполняю git commit и git push из исходного кода до GitHub. Все на GitHub обновляется с последним коммитом. Хорошо здесь

Далее на странице GitHub я создаю новый выпуск. Тег, использованный для выпуска, совпадает с версией сборки, используемой в созданном файле.nupkg. Чтобы файлы были прикреплены к выпуску, я перетаскиваю все файлы из Release папка, созданная с помощью Squirrel.

Хорошо, теперь все на GitHub. Затем я перехожу к тестированию, чтобы убедиться, что когда пользователь загружает все файлы, затем запускает Setup.exe, он правильно устанавливается и открывается. Когда я делаю это, я загружаю каждый из файлов в папку на моем рабочем столе, затем нажимаю Setup.exe. Когда я делаю это, я получаю ожидаемое MessageBox.Show(typeof(App).Assembly.GetName().Version.ToString()); Всплывающее окно MessageBox из приложения, показывающее правильный номер версии сборки, но затем ничего. Как в этот момент, он застревает в части кода обновления и никогда не проходит мимо него. Я могу оставить это сидеть там на ночь и ничего. Я даже вижу процесс, выполняющийся в памяти, в диспетчере задач, поэтому я знаю, что он не ошибся и не закрылся, но при 0% загрузки ЦП и 0% использования сети.

Любая помощь будет феноменально оценена.

1 ответ

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

Во-первых, имея UpdateManager внутри App.xaml.cs OnStartup метод заставлял выполнение кода останавливаться на await пока обновление не закончено. Я перенес проверку обновлений на метод в MainWindowViewModel,

Оттуда я завернул код обновления в try/catch и использовал MessageBox для отображения сообщений об исключениях. Это было "Ресурс не найден: ошибка 404".
Я дважды проверил URL, который я использовал для GitHubManager источник, и это был правильный адрес страницы хранилища.
Тем не менее, проблема заключалась в / в конце URL. Я изменил это с

https://github.com/dartvalince/DiscerningEye/

в

https://github.com/dartvalince/DiscerningEye

и все проверил, и теперь работает. Это CheckForUpdate функция в пределах MainWindowViewModel

private async void CheckForUpdate()
{
    try
    {
        using (var mgr = await UpdateManager.GitHubUpdateManager("https://github.com/dartvalince/DiscerningEye"))
        {
            updateManager = mgr;
            var release = await mgr.UpdateApp();
        }
    }
    catch (Exception ex)
    {
        string message = ex.Message + Environment.NewLine;
        if (ex.InnerException != null)
            message += ex.InnerException.Message;
        MessageBox.Show(message);
    }
}
Другие вопросы по тегам