我们的软件从未在Windows上正式安装,目前有这样的更新模型:
连接到互联网
点击更新按钮
连接到服务器端程序
服务器端程序创建一个包含所有文件的md5哈希列表 服务器程序目录。
客户端程序创建了所有文件的md5哈希列表 客户端程序目录。
进行比较以查看文件是否需要更新,删除或添加 到客户的机器,直到完成。
好吧,我想转到一个模型,我看到这些软件正式安装的时候用得更频繁,这样的事情发生了:
当检测到互联网连接时,程序将自动查询 服务器,以查看是否有更新的安装包。
如果是,请询问用户是否要下载新安装。
如果不是,则不执行任何操作,如果是,请下载新安装。
以编程方式卸载旧程序并开始安装 新包装。
我需要建议的部分是上面的第4条。在运行原始程序时,以编程方式卸载旧程序并开始安装新程序的最佳方法是什么。我假设必须有一些中间程序完成所有工作(关闭当前程序,运行它的卸载程序,然后启动新安装程序)有更好的方法吗?我只想转到我们更新完整安装而不仅仅是文件的模型 - 这将使我们能够更轻松地对我们的软件进行版本化,并保持自包含安装以便随时恢复。
感谢您的建议!
编辑:相关问题 - 找到特定安装的安装UUID的最简单方法是什么?
答案 0 :(得分:1)
我这样做的方法是让一个单独的程序(让我们称之为StartUp.exe)检查更新,然后加载真正的软件(让我们称之为Program.exe)。 StartUp.exe与Program.exe具有相同的图标,是桌面快捷方式和菜单项指向的可执行文件,使用与Program.exe相同的名称。
所以序列就像这样:
这样做的好处是没有任何程序文件被锁定,因为加载程序实际上是一个不同的程序。用户不是更聪明,因为他们运行的程序看起来和他们想要运行的程序一样,最终结果是他们想要运行的程序,并保证是最新版本。< / p>
使用更新按钮执行此操作会更复杂但我们需要强制执行最新版本的程序(由于版本之间的数据库差异),因此强制启动时更新对我们有效。
我认为现在这样做的方法是使用ClickOnce部署,但我从未尝试过 - 当我编写系统时它不可用,而且这种方法很简单且运行良好。