2016-03-28 41 views
0

添加到我的EXE文件,我創建了管理嵌入式數據庫怎樣文件數據在運行時在Delphi

我的客戶希望該應用程序是在一個文件中

我的任務是修改應用程序可執行文件運行時,我的應用程序,它可以從EXE,如果再次在運行時編譯時

+0

你是說你想使用你的EXE讀/寫存儲? –

+0

爲什麼你沒有exe創建自解壓文件?你需要在檔案中有更多新的東西,但是編碼會更容易。 – Johan

回答

7

一個可執行文件中提取數據庫文件,對其進行編輯,包括不是不能修改。這意味着爲了實現您的目標,您需要另一個流程。你可以做到以下幾點:

  1. 啓動過程。
  2. 從過程映像中提取數據庫。
  3. 對數據庫進行更改。
  4. 從原始圖像中提取另一個可執行文件。
  5. 基於此提取的圖像開始第二個過程。
  6. 終止第一個過程。
  7. 讓第二個進程用修改的數據庫更新磁盤映像。

坦率地說,這是一個非常可怕的想法。甚至不要嘗試這個。複雜性沒有用處,並且整個概念感覺脆弱。

請從程序分開的文件中的數據,作爲自然意圖。

+0

我可以理解爲什麼客戶會想要這樣做:複製單個文件而不是複製文件+數據只是更容易。但你是對的:以這種方式實施它是一個可怕的想法。也許不同的方法會更好:創建可執行文件的副本並啓動該可執行文件,將其傳遞給原始文件的文件名並終止。該副本然後將原始文件用作數據文件。這可以擺脫一些糟糕。 – dummzeuch

3

當然,這是一個壞主意,只是覺得有什麼virusscanners要想到這個辦法的。此外如果exe崩潰會發生什麼,您的數據庫現在會失去所有的更新?

您可以在應用程序中創建包含所需的所有文件自解壓壓縮文件。

它的工作方式如下(步驟與上面的@David相同,只是列出的組件完成大部分工作)。

  1. 提取自解壓zip。
    這包含:
    :真正的exe文件,以在提取
    數據庫
    重新創建新的自解壓exe

  2. 在關閉該程序會創建一個新的壓縮文件,其中包括需要一些文件來啓動本身(只讀形式) 數據庫 重新創建新的自解壓exe

  3. 然後它會轉換壓縮文件到一個新的自解壓exe需要一些文件
    新的自解壓存檔將按照#1啓動包含在其嵌入的zip文件中的exe文件。

這是sfx-zip-delphi的一些示例代碼。

program SelfExtractingZip; 

{$APPTYPE CONSOLE} 

uses 
    // Add a ZipForge unit to the program 
    SysUtils, ZipForge, Classes; 

var 
    archiver : TZipForge; 

begin 
    // Create an instance of the TZipForge class 
    archiver := TZipForge.Create(nil); 
    try 
    with archiver do 
    begin 
    // Set the name of the archive file we want to create. 
    // We set extension to exe because we create a SFX archive 
    FileName := 'C:\test.exe'; 
    // See SFXStub demo in ZipForge\Demos\Delphi folder 
    // to learn how to create a SFX stub 
    SFXStub := 'C:\SFXStub.exe'; 
    // Because we create a new archive, 
    // we set Mode to fmCreate 
    OpenArchive(fmCreate); 
    // Set base (default) directory for all archive operations 
    BaseDir := 'C:\'; 
    // Add the C:\test.txt file to the archive 
    AddFiles('c:\test.txt'); 
    CloseArchive(); 
    end; 
    except 
    on E: Exception do 
    begin 
     Writeln('Exception: ', E.Message); 
     // Wait for the key to be pressed 
     Readln; 
    end; 
    end; 
end. 

爲自解壓的exe

解決方案付費
如果你想有一個支付解決方案:http://www.componentace.com/sfx-zip-delphi.htm

免費
或自由:http://tpabbrevia.sourceforge.net/Self-Extracting_Archives
的abbrevia文檔的自解壓文件在這裏:https://sourceforge.net/projects/tpabbrevia/postdownload?source=dlp
請參閱第293頁。

+0

我喜歡你在這個盒子外面的想法。一個解決方案,考慮到客戶(我會建議)的要求,但應該與當前的系統工作。 –

相關問題