我希望无痛地部署应用程序,并启用自动更新。但是,我被迫使用MSI安装程序用于各种目的。我们将部署Windows窗体应用程序和一组Windows服务。
我真的很喜欢您可以点击发布标签中的几个按钮,并将其全部部署到包含.application
和.manifest
文件的网络服务器。所以,我现在可以发布更改,但无法自动提取更改。我正在尝试自己编写一个autodownloader。
.application
个文件(本地和远程),< assemblyIdentity name =“ClickOnceAppTest.application”version =“1.0.0.5”...如果本地版本不低于远程版本,则为版本值STOP。.deploy
扩展名剥离到临时路径的相应文件现在,对于Windows Forms,我可以编写一些AppStarter,它将启动主应用程序并关闭检测到的更新的主应用程序,覆盖下载的所有EXE文件和DLL文件,然后重新启动应用程序。
对于Windows服务,我想等到主循环结束(由计时器触发循环),然后停止计时器并应用更新。怎么样?
这个非常通用的算法必须有陷阱(我的直觉告诉我),我不知道,因此我发布了这个问题。什么可能出错,何时? 您是否认为XML结构会随着时间的推移而保持不变(至少是对现有标签的预测)?
我也downloadeded the .NET Application Updater。只是我必须自己构建XML文件,并且不确定它是否允许使用Windows服务。
答案 0 :(得分:0)
我想,我遇到了类似的问题。我部署了一个带有两个Windows屏幕的Windows服务。一个屏幕控制Windows服务启动/停止和安装/卸载。使用ClickOnce进行部署还有一个。
我在部署项目中添加了Windows服务和配置屏幕作为内容文件。当客户端部署ClickOnce项目时,所有这些文件都将部署在计算机上。由于ClickOnce无法部署Windows服务,因此用户需要通过将Windows服务复制到默认文件夹来调用配置屏幕并安装/启动Windows服务。
将Windows服务复制到另一个文件夹是必要的,因为Clickonce会更改每个版本的文件夹。稍后将安排部署的应用程序以检查更新。当最新版本可用时,它将提示Windows服务停止并自行更新并再次启动Windows服务。