V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RE
V2EX  ›  编程

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

  •  1
     
  •   RE · 2017-02-06 15:11:33 +08:00 · 5147 次点击
    这是一个创建于 2848 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    Windows 常见的做法 PendingFileRenameOperations
    RE
        4
    RE  
    OP
       2017-02-06 15:49:07 +08:00
    @yangff 不知道 PendingFileRenameOperations 和 Windows 服务,哪个更先执行呢
    herozhang
        5
    herozhang  
       2017-02-06 15:50:48 +08:00 via iPhone
    用系统内置的定时任务来做?就不用第二个 exe 了
    stackboom
        6
    stackboom  
       2017-02-06 15:51:29 +08:00   ❤️ 1
    提供一个思路:
    1. 定义统一服务接口 包含服务执行的 excute() 方法,把相关实现编译成 dll 放入指定文件夹。
    2. 服务启动新建 AppDomain 加载文件夹的 dll 执行方法。
    3. 服务监控文件夹变化,如果发生更改,卸载之前 AppDomain 重复 2.
    RE
        7
    RE  
    OP
       2017-02-06 15:55:32 +08:00 via iPhone
    @stackboom 有点 MEF 和反射执行的感觉
    stackboom
        8
    stackboom  
       2017-02-06 16:03:31 +08:00   ❤️ 1
    @RE #7 之前实现 Job Center 这么弄的,可惜写完 Demo 还没完善及推广就被转 java 了。
    你的需求其实也比较类似,可以搜搜 hot swap
    RE
        9
    RE  
    OP
       2017-02-06 18:38:42 +08:00
    @stackboom 请问是用 AppDomainSetup 实现的吗?在网上查了很多资料,都不是很“优雅”,你的 demo 还在吗…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   924 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.