Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加可执行文件作为Qt应用程序的资源?_Qt_Dll_Resources_Executable - Fatal编程技术网

添加可执行文件作为Qt应用程序的资源?

添加可执行文件作为Qt应用程序的资源?,qt,dll,resources,executable,Qt,Dll,Resources,Executable,我有一个外部命令行可执行文件“program.exe”,它使用DLL“program.DLL”。我想将这两个文件作为资源嵌入到我的Qt应用程序中。然后,我需要能够从我的应用程序运行program.exe。可以用Qt完成吗?特别是,可以将可执行文件和DLL作为资源添加吗 特别是,可以将可执行文件和DLL作为资源添加吗 是的,他们可以,如果您向qrc文件添加一个可执行文件,您将注意到Qt应用程序的大小将随着添加的资源可执行文件的大小而增加 但是你真的想做这样的事吗?我从未尝试过做类似的事情,但我怀疑

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

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

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

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


就我个人而言,我不会采取这种做法。创建一个可以复制应用程序文件夹中所有必要的可执行文件/DLL的安装程序(IMHO)要简单得多

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

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


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

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

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

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


我已经看到应用程序的源代码正是这样做的,但是它不是琐碎的,并且需要了解底层的知识。如果有人在如何实现这一点上有很好的资源,请添加他们。

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