创建允许远程更新的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更新文件,否则本身很难更新本身依赖文件”。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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语句:使用策略模式优化代码结构