如何在没有点击一次和任何其他第三方工具的情况下在wpf中添加软件更新程序?

Rav*_*dda 9 c# wpf

我有一个在wpf中创建的应用程序,当更新可用时需要更新.正在与包含软件版本的服务器上的xml文件进行比较更新.我在youtube上找到了SharpUpdater视频系列的参考链接,在C#中链接了Sharp Updater.它适用于Windows窗体应用程序,因为我已经下载并在我的应用程序中尝试过,但是当它在wpf应用程序上实现相同的逻辑时,它在某处失败,因为此应用程序中使用的api具有仅适用于winform应用程序的引用.我已经使用了另一个参考自动更新简单自动更新,自动补丁,用于WPF应用程序,没有更新程序块,这似乎不适合我的需要.我很想知道当有如此多的限制时,如何将我们下载的.exe放在程序文件中.对于更新以前的.exe我使用了以下代码段

private void UpdateApplication(string tempFilePath, string currentPath, string newPath, string launchArgs)
    {
        string argument = "/C choice /C Y /N /D Y /T 4 & Del /F /Q \"{0}\" & choice /C Y /N /D Y /T 2 & Move /Y \"{1}\" \"{2}\" & Start \"\" /D \"{3}\" \"{4}\" {5}";

        ProcessStartInfo Info = new ProcessStartInfo();
        Info.Arguments = String.Format(argument, currentPath, tempFilePath, newPath, Path.GetDirectoryName(newPath), Path.GetFileName(newPath), launchArgs);
        Info.WindowStyle = ProcessWindowStyle.Hidden;
        Info.CreateNoWindow = true;
        Info.FileName = "cmd.exe";
        Process.Start(Info);
    }
Run Code Online (Sandbox Code Playgroud)

但它限制我将下载的文件放在程序文件中的文件夹中.谢谢你的恩典.

Dav*_*ore 2

我鼓励您不要重新发明轮子,而采用现有的、经过验证的解决方案。虽然自动更新客户端一开始看起来很简单,但如果您没有从一开始就涵盖各种场景,它很容易变得困难并陷入混乱。

单击一次

ClickOnce 在 Visual Studio、.NET 和 Windows 中具有良好的内置支持,但您也可能会遇到安全和部署问题,特别是在使用自签名证书时。虽然我没有遇到任何大问题,但很多人对 ClickOnce 感觉不好(但我不知道有一个列表,因为我读到的内容通常没有具体的技术细节支持)。

我认为 ClickOnce 对于内部或小型项目来说是可以接受的,但对于更广泛的版本来说是不可管理的,尤其是在多个客户之间。

松鼠

Squirrel是一个免费的开源安装和更新解决方案。

如果您尝试过 Visual Studio Code,那么您已经体验过 Squirrel 安装和更新的感觉。

它是一键安装,部署到用户的本地应用程序数据文件夹,因此不需要管理权限/UAC。您可以让它使用默认值工作,或者使用他们的 API 对更新过程进行更多控制。如果您不喜欢其中的某些部分,您可以随时分叉它并根据自己的需要进行更改。