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