需要Squirrel.Windows UpdateManager.GitHubUpdateManager协助

时间:2016-03-24 22:39:32

标签: c# git github squirrel.windows

我试图在我的应用程序中使用Squirrel.Windows安装并自动更新它的GitHub存储库。跟随

中的示例

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

我能够成功完成所有步骤。我测试了安装,应用程序打开没有问题。我更新了"重新授权"它,以及本地安装的应用程序按预期更新。

因此,我知道如果我从本地目录执行此操作,Squirrel正常工作,但是,我需要从GitHub执行此操作。我正在关注directions here

由此,我将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,并使用Squirrel执行releasify命令。没问题,好。

毕竟,我执行git commit并将git推送到GitHub。 GitHub上的所有内容都使用最新提交进行更新。好在这里

接下来,在GitHub页面上,我创建了一个新版本。用于发布的标记与创建的.nupkg中使用的程序集版本相同。对于要附加到发布的文件,我将从通过Squirrel创建的Release文件夹中拖放所有文件。

好的,现在一切都在GitHub上。然后我开始测试这个,以确保当用户下载所有文件,然后运行Setup.exe,它正确安装并打开。当我这样做时,我将每个文件下载到桌面上的文件夹中,然后单击Setup.exe。当我这样做时,我从应用程序中获得预期的MessageBox.Show(typeof(App).Assembly.GetName().Version.ToString()); MessageBox弹出窗口,显示正确的程序集版本号,但后来没有。就像在这一点上一样,它会卡在代码的更新部分,永远不会超过它。我可以让它隔夜坐在那里,什么都没有。我甚至可以在任务管理器中看到进程在内存中运行,因此我知道它没有出错并关闭,但它的CPU使用率为0%,网络使用率为0%。

任何帮助都会受到非常感激。

1 个答案:

答案 0 :(得分:3)

我想出了这一点,并希望为其他任何可能达到这一点并且有同样问题的人发布答案。这都是用户错误。

首先,在 App.xaml.cs UpdateManager方法中使用OnStartup导致代码执行停止在await直到更新完成。我将更新检查移到了MainWindowViewModel中的方法。

从那里,我将更新代码包装在try / catch中,并使用MessageBox显示异常消息。它是"无法找到资源:错误404"
我仔细检查了我用于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);
    }
}