2016-03-28 10 views
0

で、実行時に私のEXEファイルにファイルのデータを追加するにはどうすればよい私は組み込みデータベース私はデルファイ

私の顧客を管理するアプリケーションを作成したマイタスクを変更することで、このアプリケーションを1つのファイルに

になりたいです私のアプリケーションは、exeからデータベースファイルを抽出して編集し、実行時にコンパイル時ではないときに再度インクルードすることができます。

+0

あなたはEXEを読み書き用に使用したいと言っていますか? –

+0

exeで自己解凍形式のアーカイブを作成してみませんか?アーカイブにはもっと多くのものが必要ですが、コードを書く方が簡単です。 – Johan

答えて

7

実行可能ファイルの実行中に実行ファイルを変更することはできません。つまり、目標を達成するためには別のプロセスが必要です。次の操作を実行できます。

  1. プロセスを開始します。
  2. プロセスイメージからDBを抽出します。
  3. DBを変更します。
  4. 元のイメージから別の実行可能ファイルを抽出します。
  5. この抽出されたイメージに基づいて2番目のプロセスを開始します。
  6. 最初のプロセスを終了します。
  7. 変更されたDBを使用してディスクイメージを更新します。

これはまったくひどい考えです。これも試してはいけません。複雑さは役に立たない目的ではなく、全体のコンセプトは脆いと感じます。

データをプログラムとは別のファイルに保存してください。

+0

ファイルとデータをコピーするのではなく、単一のファイルをコピーするほうが簡単です。しかし、あなたは正しいです:それをそのように実装するのはひどい考えです。おそらく、別のアプローチが良いでしょう:実行可能ファイルのコピーを作成し、それを開始し、元のファイルのファイル名を渡して終了します。そのコピーは元のファイルをデータファイルとして使用します。これはいくつかの不毛を取り除く。 – dummzeuch

3

これはもちろん、悪い考えで、ウイルススキャナがこのアプローチを考えていると思います。 exeがクラッシュした場合にも何が起こるのですか?あなたのdbはすべてのアップデートを失いますか?

exeが必要なすべてのファイルを含む自己解凍形式のアーカイブを作成できます。

これは以下のように機能します(手順は、上記の@Davidと同じですが、リストされたコンポーネントがほとんどの作業を行います)。

  1. 抽出自己抽出ジップ。
    これは含まれています:エキス
    時に開始する実際のexeファイルをデータベース
    含めて、それが新しいzipファイルを作成するプログラムを閉じると、新しい自己解凍exeファイル

  2. を再作成するために必要ないくつかのファイル、:
    を自身(読み取り専用形式で) データベース それは、新しい自己解凍exeファイルへのzipファイルを変換されます

  3. 新しい自己解凍exeファイルを再作成するために必要ないくつかのファイル
    新しい自己解凍形式のアーカイブは、#1のように埋め込まれたzipファイルに含まれているexeを起動します。

ここにsfx-zip-delphiのサンプルコードを示します。
またはフリーhttp://www.componentace.com/sfx-zip-delphi.htm

無料:http://tpabbrevia.sourceforge.net/Self-Extracting_Archives
ためabbreviaドキュメント自己解凍exeファイルのあなたが支払った解決策が必要な場合

を有料

ため

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. 

ソリューション自己解凍ファイルはここにあります:https://sourceforge.net/projects/tpabbrevia/postdownload?source=dlp
293ページを参照してください。

+0

私はこの箱の外であなたの考え方を好きです。顧客(私はアドバイスされます)の要件を考慮に入れるが、現在のシステムで動作するソリューション。 –