当前位置:  开发笔记 > 运维 > 正文

编写自己的自动更新程序

如何解决《编写自己的自动更新程序》经验,为你挑选了2个好方法。

在编写自己的自动更新程序时,是否有一个我应该遵循的通用框架?

前一段时间我正在阅读如何创建一个"引导过滤器",它将在主应用程序之前首先加载(因为由于文件锁定而无法更新正在运行的应用程序等)

那么任何提示/最佳实践呢?



1> MusiGenesis..:

你可能要写自己的.正如FOR提到的,基本的想法是在服务器上放置程序的最新版本(我假设是EXE),然后让应用程序在启动时检查服务器,并从服务器下载EXE(如果是)更新的版本.

我通常将其实现为应用程序在启动时调用的Web服务.关于这种方法的几个警告:

    Web服务方法需要获取服务器上EXE的版本号,并将其与调用者的版本号进行比较.如果使用Assembly类读取服务器EXE的版本号,则只要Web服务实例正在运行(至少20分钟),就会锁定该文件.因此,您有时可能无法使用较新版本替换服务器上的EXE.使用AssemblyName类 - 这允许您在不加载程序集(并锁定它)的情况下读取程序集信息.

    调用者应用程序无法用新版本替换其自己的文件 - 您无法删除或更新正在运行的应用程序文件.但它可以做的是在运行时重命名自己的文件.因此,自动更新的技巧是让应用程序重命名(例如"MyApplication.exe"到"MyApplication_OLD.exe"),将新版本下载到应用程序文件夹(名为"MyApplication.exe"),通知用户发生了更新,需要重新启动应用程序,然后结束.当用户重新启动应用程序时,它将是启动的较新版本 - 此版本检查并删除旧版本.

在这样的更新之后执行自动更新以自动重启应用程序是非常棘手的(它涉及启动另一个进程,然后在自动重启过程开始之前结束自己的进程).我从来没有让用户抱怨不得不重新启动应用程序.


我不介意在更新后重新启动应用程序(对我有​​意义;让我进入你的'不抱怨'列表).但我对需要重启PC的更新提出异议,当我选择更新时我没有得到通知!如果我知道更新需要重新启动,我就不会打扰我的所有编辑器只需要在重启后再打开*.告知用户这么难吗?"这个更新需要重启"是我所需要的.
>我从来没有用户抱怨不得不重新启动应用程序. - 考虑此评论是您的第一次投诉.我讨厌当我必须重新启动应用程序时,特别是因为更新.
@MoSlo:我完全同意,虽然我从未编写过需要重启PC的应用程序.我甚至无法想到在更新后我需要重新启动PC的原因(除非我在安装后合并了第三方组件本身需要重新启动,尽管我不会这样做除非通过事故).

2> FOR..:

好的,首先,如果市场上的某个安装程序/更新程序产品符合您的需求,您应该使用它们.话虽这么说,我很幸运不久前建立了这样一个系统.是的,我们的安装程序/更新程序包括客户端的两个部分,以便:

~A部分将连接到存储和发布最新版本的服务器; 如果有更新版本的B部分可用,它会下载并启动它

~B部分将专注于安装/更新实际应用程序(并可以下载和安装A部分的更新).

除此之外,我建议始终考虑安装程序/更新程序中的以下4个操作:

安装和卸载

更新和回滚(即撤消上次更新)

当您的用户拥有一个可以在一夜之间自动更新的系统时,回滚功能非常重要.如果每次更新都会更新,他们可以在您解决问题时回滚并继续工作.

最后,安装程序/更新程序应该尝试并且不知道它安装/更新的应用程序,以便在应用程序更改时,安装程​​序/更新程序系统受到的影响最小.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有