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更新文件,否则本身很难更新本身依赖文件”。