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