创建允许远程更新的Windows服务

demo地址:ServerAutoUpdate.rar

 

测试步骤:

1) 安装ServerAutoUpdate.Server这个Windows服务,修改配置文件中Web服务地址为ServerAutoUpdate.SelfUpdateWinSerive.MgrSite

2) 打开ServerAutoUpdate.SelfUpdateWinSerive.MgrSite,选择一个服务,能看到已经有一个实例注册了,上传一个文件(比如可以更新一下ServerAutoUpdat.ServerCore的版本号然后更新)

3) 过一段时间点击查看更新结果可以看到服务端更新文件的结果

 

基本原理:

1) 要让Windows服务支持这种更新,只需要在OnStart的时候调用SelfUpdateModule.Register(),以及在OnStop的时候调用SelfUpdateModule.UnRegister()。(当然需要引用ServerAutoUpdate.SelfUpdateWinSerive.dll),Register的时候,访问Web服务把服务自己进行注册,在UnRegister的时候反注册。

2) 在ServerAutoUpdate.SelfUpdateWinSerive.MgrSite网站中的App_Data中维护了一个所有活动Windows服务的列表,可以用于更新。

3) 更新的时候调用SelfUpdateModule中的一个Remoting服务,推方式把新的文件推过去,服务端做到事情很简单,把文件保存在本地,然后调用Process.Start开启一个cmd,cmd执行暂停当前Windows服务的操作,然后更新文件并且启动服务(注意,由于服务重启,Remoting的这个服务只能是OneWay)。

4) 服务重启之后,SelfUpdateModule.Register()方法中会检查本地文件夹下有无更新文件夹,有的话调用Web服务通知更新结果,并且删除文件夹。

5) 在ServerAutoUpdate.SelfUpdateWinSerive.MgrSite网站中这个更新批次(temp目录下)的文件夹中会多一个result.txt,查看这个文件可以看到所有实例的更新结果。

 

其实说了这么多,更新的原理就是一句话“用Process.Start启动一个bat更新文件,否则本身很难更新本身依赖文件”。

posted @   lovecindywang  阅读(1043)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示