2010-05-03 70 views
2

我想在我的Delphi二進制文件中嵌入一個可執行文件並在運行時解壓縮它。這樣做的目的是確保系統上始終有一個助手實用程序,而無需分發多個文件。如何在Delphi可執行文件中嵌入二進制文件並在運行時解壓縮?

與德爾福2007年我已經使用JvDataEmbedded,但我正在構建一個控制檯應用程序,我想知道是否有人知道的另一種方法來做到這一點,而不必爲JvDataEmbedded添加隱藏窗體。

我使用德爾福2010年

+3

將多個文件分發到系統而不必單獨分發它們的通常方法是使用安裝程序。 – 2010-05-04 00:09:13

+2

@Mick:你知道這很可能會引發大多數病毒掃描程序發出惡意軟件警報,對吧? – 2010-05-04 12:47:20

+0

@KenWhite - 它不適用於Process Explorer(它使用類似的方法)。並沒有在我用我自己的實用程序測試過的機器上。 – Mick 2014-05-22 14:26:55

回答

13

構建嵌入本期節目資源的RC文件,然後在運行時,你可以用TResourceStream提取它。 (有關一般原理,請參閱this question of mine的接受答案。)您可以將TResourceStream鏈接到TFileStream以將其寫出到臨時文件,然後運行它。

1

酷招,梅森! 要添加...我發現,如果「母艦」將「偵察艦」直接轉儲到運行的同一個目錄中,這可能會遇到UAC /權限的問題。如果您使用的是Vista/Windows7,那麼在沒有提升權限的情況下運行時,會阻止常規程序寫入「\ program files」目錄。所以在這種情況下,該文件可能會被放置在一個影子目錄中。它會變得更好:如果您從安裝程序啓動「母親」程序,您可能會得到不同的結果,因爲安裝程序有特殊的訪問權限,並且它們可能會臨時授予他們啓動的程序的訪問權限(這會使其總是說是YES到「你想現在運行程序嗎?」在安裝結束時)。

1

使用TDataModule來保存TJvDataEmbedded而不是TForm。

+0

...或者簡單地在代碼中創建'TJvDataEmbedded' ...或更好地使用Mason的方法 – 2010-05-04 07:22:55

相關問題