我有几个小的独立程序,有一个更新。我有一个更新程序,可以更新它们(所需的项目没有安装程序,它只是替换文件)。
但是如何更新更新程序本身呢?我自己看到了三个解决方案,但是最好的方法是什么呢?
1) How to update "updater"? (C#)这里的问题是,我不希望在我的每个小程序中都包含更新程序;另一个问题是,更新程序可以修补所有的应用程序,但是在某些情况下,一个人得到一个应用程序,而不应该知道其他的应用程序。
2)使用第一个更新程序下载第二个更新程序,启动新的更新程序,删除第一个更新程序,并重新命名自己以匹配旧的快捷方式。最好的方法是,如果可能的话,可以做一个selfreplace (在加载新文件时删除自身并自行替换旧的文件)。
3)为更新程序创建启动程序,启动程序将永远不会更新,但可以替换更新程序。我觉得有点过火了。
所有3种解决方案都应该或多或少地起作用,但也许有一种更简单的方法/更干净的解决方案。
发布于 2014-02-13 18:00:01
在不知道任何其他信息的情况下,我能想到的绝对最简单和最快的方法(如果所有拥有这些应用程序的计算机都在同一个网络上)就是编写一个批处理文件,检查本地机器上每个应用程序的存在,如果它找到它,它会从一个中央位置为该应用程序提取一个“更新”批处理文件,并运行它(然后继续处理其他应用程序)。
就像这样:
...
SET CentralLoc=\\CentralServer\Updates
...
IF EXIST C:\CompanyApplications\Application1 (
COPY %CentralLoc%\UpdateApplication1.bat .\
call .\UpdateApplication1.bat
)
...然后,您只需保存新的批处理文件(或EXE、MSI或任何其他文件),只要有新的更新可用,就可以将每个应用程序更新到该中心位置。
这个批处理文件实质上是一个“更新者的更新程序”(选项3),但尽可能保持它的简单和简单。
然而,这只是我第一次在没有更多了解你的问题的情况下接受它。这样做有很多更好的方法,特别是在公司内部网络上(MSI部署、基础设施自动化工具(如Chef和Puppet )、支持批量更新推送的it库存工具等);但如果需要的话,上述方法是在15分钟内实现整个任务的一种潜在方法。
编辑
在我的回答中加上这个评论..。
我能想到的下一个最好的方法是为更新程序本身创建一个C#项目(更新程序的.exe ),但是将更新程序的逻辑放入一个单独的.dll文件中,该文件与更新程序捆绑在一起。更新程序可以在.dll启动时动态加载它,如果DLL本身有更新,它可以卸载它,获取新的DLL,然后重新加载它,所有这些都在运行时没有任何明显的用户注意。所有实际的更新程序逻辑都将存在于DLL中,并且可以随时更新,只需让更新程序替换自己的DLL.
https://stackoverflow.com/questions/21761640
复制相似问题