C# 写的 Windows 后台服务,求一个更好的自动更新的思路

2017-02-06 15:11:33 +08:00
 RE

服务是随系统启动的,定时检查有新版本,假设,新文件已经下载到了 Update 目录,应该如何自动更新呢?

目前的思路:
增加一个 Update.exe 外部程序,执行 Update.exe 并停止后台服务,覆盖主程序,启动后台服务。

想求助 V 友们,有没有更好的方法,甚至连第二个 exe 都不需要的,有吗?

5017 次点击
所在节点    编程
9 条回复
JackyBao
2017-02-06 15:39:04 +08:00
我以前也是用 Update.exe 来做的,但是我觉得肯定有更好的办法。
RE
2017-02-06 15:42:43 +08:00
@JackyBao 桌面程序用 Update.exe 或者覆盖安装,都挺常见的。但因为这个是 Windows 服务,我担心在程序之间切换,会有权限或其它问题,因为 Windows 服务有可能只是系统开机了、用户还没登录时就启动了。
yangff
2017-02-06 15:45:17 +08:00
chrome 大概是一个启动器,然后每个版本一个目录

Windows 常见的做法 PendingFileRenameOperations
RE
2017-02-06 15:49:07 +08:00
@yangff 不知道 PendingFileRenameOperations 和 Windows 服务,哪个更先执行呢
herozhang
2017-02-06 15:50:48 +08:00
用系统内置的定时任务来做?就不用第二个 exe 了
stackboom
2017-02-06 15:51:29 +08:00
提供一个思路:
1. 定义统一服务接口 包含服务执行的 excute() 方法,把相关实现编译成 dll 放入指定文件夹。
2. 服务启动新建 AppDomain 加载文件夹的 dll 执行方法。
3. 服务监控文件夹变化,如果发生更改,卸载之前 AppDomain 重复 2.
RE
2017-02-06 15:55:32 +08:00
@stackboom 有点 MEF 和反射执行的感觉
stackboom
2017-02-06 16:03:31 +08:00
@RE #7 之前实现 Job Center 这么弄的,可惜写完 Demo 还没完善及推广就被转 java 了。
你的需求其实也比较类似,可以搜搜 hot swap
RE
2017-02-06 18:38:42 +08:00
@stackboom 请问是用 AppDomainSetup 实现的吗?在网上查了很多资料,都不是很“优雅”,你的 demo 还在吗…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338456

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX