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