【发布时间】:2012-02-15 05:04:41
【问题描述】:
启动器在游戏中最为常见。想想英雄联盟、星际争霸 II 或几乎所有的 MMO。在开始实际游戏之前,您有一个负责更新和修补的小型启动器应用程序。
我想通过我正在开发的特定非游戏应用程序来推动这个方向。启动器的概念非常有意义:它检查更新、替换适当的二进制文件/库、可能运行完整性检查并启动应用程序。但是,启动器如何自我更新?这往往是一个罕见的事件,但它是如何完成的?启动器是否真的只是覆盖了它当前运行的二进制文件?还是下载后有某种交换步骤?我需要能够向启动器推送(罕见的)更新(特别是如果我在启动器中发现了一些错误)。
我的特定项目将使用 C#,但我也对概念上相似的 C++ 和/或 Java 解决方案感兴趣,以供将来参考。
【问题讨论】:
-
一旦程序被加载到内存中,它不应该真正关心二进制图像文件是否来自它的来源,所以你应该被允许覆盖它。然后你需要做的就是重新启动程序,也许是
exec。 -
@KerrekSB 听起来很简单。不过,我对最后一步还是有点模糊。那么,在单独的进程中运行程序然后退出?
-
@KerrekSB,Windows 在运行时锁定可执行文件。部分原因是某些部分可能不会立即加载。
-
当我读到这篇文章时,我真的很想知道启动器首先解决了什么问题。如果你还是要编写一个自更新程序,为什么不完全避免启动器呢?
-
@AndréCaron:它是一个更小的可执行文件,打开速度更快,并且通常比主程序有另一个用途。