【问题标题】:Restart and Update ClickOnce Application In Production在生产中重新启动和更新 ClickOnce 应用程序
【发布时间】:2014-07-17 11:16:29
【问题描述】:

简短版

有没有办法在 ClickOnce 应用程序运行时自动更新它

长版...

设置

我有一个用于我正在开发的应用程序的 API 和控制台代理。我需要卸载一些工作,这是处理它的最简单和最快的方法。我是 ClickOnce 的新手(事实上,这是我唯一一次使用它),但它对我来说似乎很完美。我已对其进行了设置,以便应用程序在设置了“不安装”选项的情况下在线运行。

在大规模情况下,代理调用 API 来询问它应该做什么,然后 API 返回一个任务和所需的任何参数。

问题

由于我的控制台运行程序的“安静”特性,我试图使其需要尽可能少的用户交互。但是,我现在面临需要更新它的问题。理想情况下,它' d 在我壁橱里的服务器上运行,所以我真的不想每次我需要重新启动应用程序时都连接显示器和所有这些。

有没有在 ClickOnce 应用程序运行时更新它的好方法?

可能的解决方案

我在搜索中没有找到与此相关的任何内容。我发现一些地方在谈论更新,但它们都提供了如何在应用程序启动时检查更新的示例。这甚至与我无关,因为我没有将它安装在客户端机器上。

正如我所说,服务器正在将命令向下推送到应用程序,因此我可以实现一个“执行更新”的命令。我最初的想法是这样做,然后执行Process.Start(string) 以从我的网络服务器中提取.application 文件,这当然会有最新版本。我可以这样做,然后停止正在运行的实例,理论上这会起作用。

但这会引发签名问题。我宁愿不处理签约,尽管我承认我从来没有做过任何事情,所以也许它没有听起来那么糟糕。但是现在,当我从我的网站启动运行程序时,它需要我单击一个 Windows 对话框以确保我认识到风险。我不在乎我是否必须在第一次运行时这样做,但显然这否定了能够进行这样的生产更新的好处。

也许签约比我想象的要容易?有没有一种免费的好方法可以免费签署应用程序并让它足够值得信赖,以至于我可以避免该对话,至少在我接受一次之后?

我希望有一个标准的方法来做到这一点,但由于这不是一个特别标准的问题,我也愿意接受低于标准的方法。例如,如果我可以启动另一个控制台应用程序,停止主应用程序,换出一些应用程序文件,然后启动它,这可能会起作用。但这听起来很容易失败,而且通常比我想的要复杂。

不一定是 100% 的解决方案。显然这会很好,但是大多数时间里可以工作的东西就足够了,因为这实际上是我的个人项目,而不是客户计算机上的任何东西。

【问题讨论】:

    标签: clickonce


    【解决方案1】:

    你需要ApplicationDeployment

    CheckForUpdate()CheckForUpdateAsync()这两个方法

    当有可用更新时,请使用 Update()UpdateAsync()

    这是一种重新启动 ClickOnce 应用程序的方法。

    using System.Diagnostics;
    using System.Windows;
    
    public class Foo
    {
        public void Restart()
        {
            Process.Start(Application.ResourceAssembly.Location);
            Application.Current.Shutdown();
        }
    }
    

    【讨论】:

    • 哦,太棒了。那些看起来很完美。虽然我在文档中看到它说“如果 CheckForUpdate 发现更新可用,并且用户选择不安装它,......”这是否意味着用户被提示?
    • 其实整段:" 如果 CheckForUpdate 发现有更新可用,而用户选择不安装,ClickOnce 会在下次应用程序更新时提示用户有可用更新运行。没有办法禁用此提示。(如果应用程序是必需的更新,ClickOnce 将安装它而不提示。)“如果应用程序是必需的更新...”是否意味着它会在不提示的情况下执行?
    • “CheckForUpdate 方法将当前安装的部署版本与在 UpdateLocation 找到的部署清单中指定的版本进行比较。如果服务器上的版本与安装的版本不同,则返回 true。” [当您不更新应用程序时] “ClickOnce 将在下次运行应用程序时提示用户有可用更新。”
    • 太棒了。这正是我需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多