代码之家  ›  专栏  ›  技术社区  ›  JimDaniel

如何实现自动更新检测模型

  •  2
  • JimDaniel  · 技术社区  · 15 年前

    我们的软件从未正式安装在Windows上,目前有如下更新模式:

    1. 连接到Internet

    2. 单击更新按钮

    3. 连接到服务器端程序

    4. 服务器端程序创建中所有文件的MD5哈希列表 服务器程序目录。

    5. 客户端程序创建中所有文件的MD5哈希列表 客户端程序目录。

    6. 进行比较,查看文件是否需要更新、删除或添加 到客户机,直到完成。

    好吧,我想换一个我看到的最近更频繁使用的模型,在那里正式安装了软件,类似的事情发生了:

    1. 当检测到Internet连接时,程序将自动查询 服务器查看是否有更新的安装包。

    2. 如果是,请询问用户是否要下载新安装。

    3. 如果否,则不执行任何操作;如果是,则下载新安装。

    4. 程序化的 卸载旧程序并开始安装 新包装。

    我需要建议的部分是上面的第4部分。在运行原始程序的同时,以编程方式卸载旧程序并开始安装新程序的最佳方法是什么?我假设一定有一些中间程序可以完成所有的工作(关闭当前程序,运行卸载程序,然后启动新的安装程序),有更好的方法吗?我只想移动到一个模型,在这个模型中,我们更新完整的安装,而不仅仅是文件——这将使我们更容易地版本我们的软件,并保持自包含的安装在任何时候恢复到。

    谢谢你的建议!

    编辑:相关问题-找到特定安装的安装UUID的最简单方法是什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Chris Latta    15 年前

    我这样做的方法是有一个单独的程序(我们称之为startup.exe),它检查更新,然后加载真正的软件(我们称之为program.exe)。startup.exe与program.exe具有相同的图标,是桌面快捷方式和菜单项指向的可执行文件,与program.exe同名。

    所以顺序是这样的:

    1. 用户双击桌面快捷方式或菜单项,该项看起来像program.exe,被称为相同的名称,但实际上是startup.exe。
    2. startup.exe运行并检查是否有任何更新
    3. 如果有更新,它只是复制然后跨越(我们用进度条构建了一个很好的系统,但是您可以简单地将新文件复制到旧文件上)
    4. startup.exe然后运行program.exe
    5. 然后,Startup.exe退出

    这样做的好处是没有任何程序文件被锁定,因为加载程序实际上是一个不同的程序。用户并不聪明,因为他们运行的程序看起来和他们想要运行的程序一样,并且被称为相同的程序,最终结果是他们想要运行的程序,并且保证是最新的版本。

    使用更新按钮进行更新会更复杂,但我们需要强制程序的最新版本运行(由于版本之间的数据库差异),因此在启动时强制更新对我们有效。

    我相信现在的方法是 ClickOnce 部署,但我从来没有尝试过——当我编写系统时,它不可用,而且这个方法很简单并且工作得很好。

    推荐文章