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