3

既存のexeファイルを検索して、そのディレクトリをインストーラーに使用するにはどうすればよいですか?

exeファイルが見つからない場合は、ユーザーにパスを参照してもらいたいと思います。exeファイルが別の場所にインストールされている場合。

セナリオ1(最も一般的なケース):

デフォルトのディレクトリはc:\ test \ My program

これは、[宛先の場所の選択]ページにパスとして表示されます。ユーザーが[次へ]を押すと、チェックが表示されます。デフォルトのディレクトリが存在することを確認するには(c:\ test \ My program)存在する場合、ユーザーは[インストールの準備完了]ページに進む必要があります。

セナリオ2(めったにないケース):

デフォルトのディレクトリはc:\ test \ My program

これは、[宛先の場所の選択]ページにパスとして表示されます。ユーザーが[次へ]を押すと、チェックが表示されます。デフォルトのディレクトリが存在することを確認するには(c:\ test \ My program)存在しない場合、ユーザーは「マイプログラム」へのパスの入力を求められる必要があります。その後、ユーザーは[インストールの準備完了]ページに進む必要があります。次に、ユーザーが正しいパスを選択したことを信頼します

InnoSetupでこれを行うにはどうすればよいですか?

4

2 に答える 2

5

私はすでにインストーラーで同様のことをしています。私が最初に行うことは、プログラムからレジストリ値を読み取る必要があり、そのレジストリ値がない場合は、そのプログラムのデフォルトディレクトリを選択します。例えば:

DefaultDirName={reg:HKLM\Software\Activision\Battlezone II,STInstallDir|reg:HKLM\Software\Activision\Battlezone II,Install121Dir|{pf32}\Battlezone II}

ここで、ユーザーはインストーラーを実行し、プログラムが正しいフォルダーにあるかどうかを確認する必要があります。これは、プログラムの実行可能ファイルがすでに存在することを確認することによって行われます。私はそうするためにこのコードを使用します。

{ Below code warns end user if he tries to install into a folder that does not contain bzone.exe. Useful if user tries to install into addon or any non-BZ2 folder. }
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Log('NextButtonClick(' + IntToStr(CurPageID) + ') called');
  case CurPageID of
    wpSelectDir:
    if not FileExists(ExpandConstant('{app}\bzone.exe')) then begin
      MsgBox('Setup has detected that that this is not the main program folder of a Battlezone II install, and the created shortcuts to launch {#MyAppName} will not work.' #13#13 'You should probably go back and browse for a valid Battlezone II folder (and not any subfolders like addon).', mbError, MB_OK);
      end;
    wpReady:
  end;
  Result := True;
end;

上記のコードは、ターゲットの実行可能ファイルが存在することを確認し、存在しない場合はユーザーに警告するだけで、ディレクトリに戻って変更するだけでなく、とにかくインストールを続行する機会をユーザーに与えます。

また、既存のプログラムにパッチやアドオンをインストールしているように見えるので、

DirExistsWarning=no
AppendDefaultDirName=false

また、オプションで、スタートメニューエントリを作成していない場合に不要な画面を防ぐため

DisableProgramGroupPage=yes
于 2013-06-11T19:32:39.950 に答える
3

ファイル入力ページを作成し、予想される場所に見つからない場合は、ユーザーがPicture.exeバイナリの場所を手動で選択できるようにします。

このコードのコメント付きバージョンをフォローできます。

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "CurrentBinary.exe"; DestDir: "{app}"
Source: "PictureExtension.dll"; DestDir: "{code:GetDirPath}"

[Code]
var
  FilePage: TInputFileWizardPage;

function GetDirPath(const Value: string): string;
begin
  Result := '';
  if FileExists(FilePage.Values[0]) then
    Result := ExtractFilePath(FilePage.Values[0]);
end;         

procedure InitializeWizard;
var
  FilePath: string;
begin
  FilePage := CreateInputFilePage(wpSelectDir, 'Select Picture.exe location', 
    'Where is Picture.exe installed ?', 'Select where Picture.exe is located, ' +
    'then click Next.');
  FilePage.Add('Location of Picture.exe:', 'Picture project executable|Picture.exe', 
    '.exe');

  FilePage.Edits[0].ReadOnly := True;
  FilePage.Edits[0].Color := clBtnFace;

  FilePath := ExpandConstant('{pf}\Picture\Picture.exe');
  if FileExists(FilePath) then
    FilePage.Values[0] := FilePath;
end;
于 2013-02-12T21:07:51.627 に答える