【问题标题】:Adding executables as resources of a Qt application? [duplicate]添加可执行文件作为 Qt 应用程序的资源? [复制]
【发布时间】:2012-03-13 03:07:27
【问题描述】:

我有一个使用 DLL“program.dll”的外部命令行可执行文件“program.exe”。我想将这两个文件作为资源嵌入到我的 Qt 应用程序中。然后,我需要能够从我的应用程序中运行 program.exe。可以用Qt完成吗?特别是,可执行文件和 DLL 可以作为资源添加吗?

【问题讨论】:

    标签: qt dll resources executable


    【解决方案1】:

    您可以将它们作为资源添加,但您将无法直接从资源中执行“program.exe”,因为这是一个底层操作系统无法理解的纯 Qt 系统。

    您需要在执行时将其(使用 .dll)从资源复制到临时位置并从那里执行。

    显然,正如@webclectic 指出的那样,这不是一个正确的方法。除非有绝对的理由这样做,否则正确的方法是使用这些可执行文件创建一个包(.msi、.rpm,具体取决于目标操作系统)并以这种方式部署它们。

    【讨论】:

    • 是的,我很害怕。当然,我知道我可以简单地安装可执行文件,但出于各种原因,我更愿意将其作为资源(主要是为了让用户更难将可执行文件换成另一个 - 我知道可以提取资源并更改,但比仅交换文件更困难)。
    【解决方案2】:

    具体来说,可执行文件和 DLL 可以作为资源添加吗?

    是的,他们可以,如果您将可执行文件添加到 qrc 文件,您会注意到 Qt 应用程序的大小将随着添加的资源可执行文件的大小而增加。

    但是你真的想做这样的事情吗?我从未尝试过做类似的事情,但我怀疑这是否可能。系统将无法从您的资源中读取可执行文件。可执行文件的执行是系统特定的,系统需要能够找到要执行的文件。我想在您的应用程序启动时,您可以将可执行文件复制到临时目录并从那里调用它。在应用程序退出时,您应该删除这些文件。

    我个人不会采用这种方法。创建一个可以复制应用程序文件夹中所有必要的可执行文件/dll的安装程序要简单得多(恕我直言)。

    【讨论】:

      【解决方案3】:

      二进制文件可以作为资源添加,并且像其他人所说的那样提取到临时位置以从那里执行。这类似于自解压安装程序的工作方式。

      但是,也可以直接使用它们,而无需通过编写自定义 DLL 加载器将它们保存到临时位置。

      我不确定,但我认为可执行文件可以以相同的方式加载并通过分叉启动。但我认为与直接从硬盘驱动器启动相比,生成的过程会有所不同。

      我已经看到了完全执行此操作的应用程序的源代码,但它并不重要,并且需要了解低级内容。如果有人对如何实现这一点有很好的资源,请添加它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        相关资源
        最近更新 更多