有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

c#应用程序启动器如何自我更新?

发射器在游戏中最常见。想想传说联盟,星际争霸2,或者几乎所有的MMO。在开始真正的游戏之前,你有一个小的launcher应用程序,负责更新和补丁

我想用我正在开发的一个特定的非游戏应用程序朝这个方向发展。启动器的概念非常合理:它检查更新,替换适当的二进制文件/库,可能运行完整性检查,并启动应用程序。但是,启动器如何自我更新?这往往是一个罕见的事件,但它是如何做到的?启动器真的只是写在它当前运行的二进制文件上吗?或者下载后是否有某种交换步骤?我需要能够推出(罕见的)更新的发射器(特别是如果我发现一些错误在我的发射器)

我的专案将在C语言中,但我对概念上类似的C++和/或java解决方案感兴趣,也为将来参考。p>


共 (3) 个答案

  1. # 1 楼答案

    我从未尝试过,但这是我的猜测(假设您无法覆盖正在执行的文件。如果可以,这会更简单)

    Updater A checks if its the newest version
    If launcher isnt the newest version
        Download the differences (to save bandwidth) to file B
        Apply the delta to own code into file C
        Launch file C.
        Close
    If file C exists (update happened recently)
        Try to delete C  (update was previous launch, delete temporary file)
        If delete fails  (We are C, means A is out of date)
            Copy C over A  (update launcher)
            Note that you can keep going, dont have to restart even though we are C.
    If game isnt newest version
        Download the differences (to save bandwidth) to file B
        Apply the delta to game into file D
        delete game
        Rename D -> game
    Run game
    

    André Caron向我展示了使用transactional file IO可以更好地完成交换技巧

  2. # 2 楼答案

    基本上,启动器会检查是否有更新的版本,如果有,启动一个任务以获取新版本,然后执行它,然后关闭

    鉴于updater应用程序体积小,加载速度快,你可以让它检测、下载、弹出对话框说有新版本,并且在旧版本关闭和新版本运行时几乎不会闪烁

  3. # 3 楼答案

    如果你在办公室。NET世界中,有一种称为“单击一次”的部署策略。这是为了解决您描述的问题而创建的

    ClickOnce是一种部署技术,允许您创建基于Windows的自更新应用程序,这些应用程序可以在用户交互最少的情况下安装和运行。ClickOnce部署克服了部署中固有的三个主要问题:

    资料来源:Click Once

    在开始这一策略之前,我建议研究一下它的利弊,因为有狂热的粉丝和批评者

    简单地说,您可以将新版本上载到网站(应用程序配置为了解该网站)。在启动时,应用程序检查站点,如果有更新,则向用户提供一个对话框。当用户选择应用更新时,应用程序停止,同时激活“单击一次”组件以应用更改。组件然后重新启动可执行文件,这一切对最终用户来说都是一个无缝的操作