2012-03-13 55 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加載程序將它們保存到臨時位置。

我不確定,但我認爲可執行文件可以以相同的方式加載並由分叉開始。但是我認爲,與直接從硬盤驅動器啓動時相比,最終的過程會有所不同。

我已經看到完全做到這一點的應用程序的源代碼,但它是非平凡的,需要知識的底層的東西。如果有人有如何實現這一目標的良好資源,請添加它們。

相關問題