3

Delphi で作成されたアプリケーションがあり、バイナリとカタログ データを含むデータベース (MDB) を含むいくつかのバージョンがあります。

製品ライフ サイクル中の修正/機能強化は、データベース ファイルまたは一部のバイナリ ファイルのいずれかに含まれます。

バージョンはレジストリに保持されます。

新しいパッチが利用可能になると、ユーザーは異なるバージョンのプログラムを使用する可能性があります。

現在、ユーザーは、Inno Setup で次のシナリオを実装する方法について、さまざまなバージョンを持っています。

  1. ユーザーがバージョン A を使用している場合、インストールを防ぎます。
  2. ユーザーがバージョン B のコピー データベースを持っている場合、ファイル 1、ファイル 2、ファイル 3 をコピーします。
  3. ユーザーがバージョン C を使用している場合は、file1 を更新するだけです。

Innoセットアップでこれを実装する正しい方法は何ですか?

4

3 に答える 3

2

Inno はデフォルトでファイルのバージョン情報を確認します。そのため、パッチのバージョンが新しい場合にのみファイルを更新する必要がある場合は、何もしません。仁野はすでにそのように振る舞っている。

一方、パッチでファイルを同じバージョンに置き換える必要がある場合 (またはファイルにバージョン情報がない場合) は、replacesameversionフラグを使用します。これにより、Inno はファイルの内容を比較し、異なる場合はそれを置き換えます。このフラグの詳細については、ファイルのヘルプを参照してください。

于 2009-01-15T17:33:19.023 に答える
2

それが正しい方法かどうかはわかりませんが、[code] セクションと BeforeInstall フラグを使用できます。

そのようです

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')
Source: "MYFILE.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')
Source: "MYDB.MDB"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')

[Code]

function MyBeforeInstall(InstallPath): Boolean;
begin
  Result:= FALSE;
    //Check if this file is ok to install
    MsgBox(CurrentFileName , mbInformation, MB_OK);
end;

次に、CurrentFileName を使用して、ファイルをインストールできるかどうかを判断します。結果が false の場合にインストーラーを終了するか、個々のファイルをスキップするかはわかりません。

[Types]/[Components] セクションを使用して、インストールするファイルを決定することもできますが、それを自動選択する方法があるかどうかはわかりません。

于 2009-01-15T17:30:22.150 に答える
0

バージョンを確認する関数を作成できます。

詳細については、この Web サイトを参照してください ( http://agiletracksoftware.com/blog.html?id=4 )

[Code]
; Each data file contains a single value and can be loaded after extracted.
; The filename and DestDir from the [Files] section must match the names
; and locations used here
function GetAppMajorVersion(param: String): String;
     var
          AppVersion: String;
     begin
          ExtractTemporaryFile('major.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\major.dat'), AppVersion);
          Result := AppVersion;
     end;

function GetAppMinorVersion(param: String): String;
     var
          AppMinorVersion: String;
     begin
          ExtractTemporaryFile('minor.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\minor.dat'), AppMinorVersion);
          Result := AppMinorVersion;
     end;

function GetAppCurrentVersion(param: String): String;
     var
          BuildVersion: String;
     begin
          ExtractTemporaryFile('build.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\build.dat'), BuildVersion);
          Result := BuildVersion;
     end;

AgileTrack ブログからのコード抜粋: Inno Setup を使用してバージョン管理されたインストーラーを作成する

于 2009-01-23T16:30:38.510 に答える