2012-03-13 28 views
3

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

回答

3

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

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

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

+0

是的,我害怕这一点。当然,我知道我可以简单地安装可执行文件,但由于各种原因,我宁愿将它作为资源(主要是为了让用户更难交换另一个可执行文件 - 我知道可以提取资源并进行了更改,但比交换文件更困难)。 – 2012-03-13 11:30:24

3

特别是,可以将可执行文件和DLL添加为资源?

是的,他们可以,如果你添加一个可执行文件到qrc文件,你会注意到你的Qt应用程序的大小会增加所增加的资源可执行文件的大小。

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

就我个人而言,我不会采用这种方法。它更简单和优雅(恕我直言)创建一个安装程序,将复制应用程序文件夹中的所有必要的可执行文件/ dll。

0

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

但是,也可以直接使用它们,而不必通过写入自定义DLL加载程序将它们保存到临时位置。

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

我已经看到完全做到这一点的应用程序的源代码,但它是非平凡的,需要知识的底层的东西。如果有人有如何实现这一目标的良好资源,请添加它们。

相关问题