终止程序然后从正在终止的程序中运行其他代码的最佳方法是什么?例如,程序自我更新的最佳方式是什么?
答案 0 :(得分:10)
您有几个选择:
您可以使用其他应用程序.exe来执行自动更新。这可能是最好的方法。
您还可以在程序运行时重命名该程序的exe。因此,允许您从某个更新服务器获取该文件并替换它。在程序的下一次启动时,它将使用新的.exe。然后,您可以在启动时删除重命名的文件。
答案 1 :(得分:1)
了解我们在这里谈论的语言真的非常。我确信我可以在PowerBuilder或Cobol中为您提供一些非常好的技巧,但这可能不是您所追求的!如果你正在谈论Java,那么你可以使用一个关闭钩子 - 对我很有用。
答案 2 :(得分:1)
另一件需要考虑的事情是,我一直在使用的大多数“主要”应用程序(FileZilla,Paint.NET等)都让更新程序卸载以前版本的应用程序,然后重新安装新版本的应用程序。
我知道这对于非常大的应用程序不起作用,但对于中小型应用程序来说,这似乎是一个“首选”过程。
答案 3 :(得分:0)
如果没有主程序在关闭之前启动的第二个程序,我不知道如何做到这一点。程序2下载并安装更改,然后重新启动主程序。
答案 4 :(得分:0)
我们在之前的应用中做过类似的事情。我们从X或关闭按钮捕获程序终止(在.NET 2.0中),然后启动用户没有看到的后台更新过程。它会检查服务器(客户端 - 服务器应用程序)是否有更新,如果有可用的,它将使用BITS在后台下载。然后在下次应用程序打开时,它会意识到有一个新版本(我们设置了一个标志)并弹出一条消息提醒用户注意新版本,如果他们想要查看添加的新功能则会点击一个按钮到这个版本。
答案 5 :(得分:0)
如果您有一个运行来执行更新的辅助应用程序,它会更容易。您将执行“更新程序”应用程序,然后在其中等待其他进程退出。如果您需要访问常规应用程序DLL等但它们也需要更新,您可以从已更新DLL的辅助位置运行更新程序,以便它们不在原始位置使用。
答案 6 :(得分:0)
如果您正在使用编写.NET应用程序,则可以考虑使用ClickOnce。如果您需要相当多的自定义,您可能会在其他地方寻找。
我们有一个外部流程可以为我们执行更新。当它找到更新时,它会将其下载到辅助文件夹,然后等待主应用程序退出。退出时,它将替换所有当前文件。主要过程每4小时就会启动更新过程。由于更新过程将等待主应用程序的退出,因此除了启动更新应用程序之外,主应用程序不必执行任何特殊处理。
这是一个侧面问题,但是如果您正在考虑编写自己的更新过程,我建议您考虑使用某种压缩来(1)节省下载和(2)提供一个文件来从更新服务器。
希望有意义!