【发布时间】:2014-07-17 11:16:29
【问题描述】:
简短版
有没有办法在 ClickOnce 应用程序运行时自动更新它?
长版...
设置
我有一个用于我正在开发的应用程序的 API 和控制台代理。我需要卸载一些工作,这是处理它的最简单和最快的方法。我是 ClickOnce 的新手(事实上,这是我唯一一次使用它),但它对我来说似乎很完美。我已对其进行了设置,以便应用程序在设置了“不安装”选项的情况下在线运行。
在大规模情况下,代理调用 API 来询问它应该做什么,然后 API 返回一个任务和所需的任何参数。
问题
由于我的控制台运行程序的“安静”特性,我试图使其需要尽可能少的用户交互。但是,我现在面临需要更新它的问题。理想情况下,它' d 在我壁橱里的服务器上运行,所以我真的不想每次我需要重新启动应用程序时都连接显示器和所有这些。
有没有在 ClickOnce 应用程序运行时更新它的好方法?
可能的解决方案
我在搜索中没有找到与此相关的任何内容。我发现一些地方在谈论更新,但它们都提供了如何在应用程序启动时检查更新的示例。这甚至与我无关,因为我没有将它安装在客户端机器上。
正如我所说,服务器正在将命令向下推送到应用程序,因此我可以实现一个“执行更新”的命令。我最初的想法是这样做,然后执行Process.Start(string) 以从我的网络服务器中提取.application 文件,这当然会有最新版本。我可以这样做,然后停止正在运行的实例,理论上这会起作用。
但这会引发签名问题。我宁愿不处理签约,尽管我承认我从来没有做过任何事情,所以也许它没有听起来那么糟糕。但是现在,当我从我的网站启动运行程序时,它需要我单击一个 Windows 对话框以确保我认识到风险。我不在乎我是否必须在第一次运行时这样做,但显然这否定了能够进行这样的生产更新的好处。
也许签约比我想象的要容易?有没有一种免费的好方法可以免费签署应用程序并让它足够值得信赖,以至于我可以避免该对话,至少在我接受一次之后?
我希望有一个标准的方法来做到这一点,但由于这不是一个特别标准的问题,我也愿意接受低于标准的方法。例如,如果我可以启动另一个控制台应用程序,停止主应用程序,换出一些应用程序文件,然后启动它,这可能会起作用。但这听起来很容易失败,而且通常比我想的要复杂。
不一定是 100% 的解决方案。显然这会很好,但是大多数时间里可以工作的东西就足够了,因为这实际上是我的个人项目,而不是客户计算机上的任何东西。
【问题讨论】:
标签: clickonce