インストーラーでファイルが宛先の場所に存在するかどうかを確認する必要があります。存在しない場合、インストールは中止されます。私のプロジェクトは更新パッチなので、アプリケーションのメインexeがインストール先にない場合は、インストーラーが更新ファイルをインストールしないようにします。これどうやってするの?
誰かがWindowsレジストリを介してファイルのバージョンを確認するためのコードの例を与えることができますか?
[Files]
Source C:\filename.exe; DestDir {app}; Flags: ignoreversion; BeforeInstall: CheckForFile;
[code]
procedure CheckForFile(): Boolean;
begin
if (FileExists('c:\somefile.exe')) then
begin
MsgBox('File exists, install continues', mbInformation, MB_OK);
Result := True;
end
else
begin
MsgBox('File does not exist, install stops', mbCriticalError, MB_OK);
Result := False;
end;
end;
正しいフォルダを選択するまで、ユーザーに先に進まないでください。
function NextButtonClick(PageId: Integer): Boolean;
begin
Result := True;
if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\yourapp.exe')) then begin
MsgBox('YourApp does not seem to be installed in that folder. Please select the correct folder.', mbError, MB_OK);
Result := False;
exit;
end;
end;
もちろん、それらに適したフォルダを自動的に選択することもお勧めします。レジストリから正しい場所を取得する。
別の解決策は InitializeSetup()
:です。
クレジット: マンフレッド
[code]
function InitializeSetup(): Boolean;
begin
if (FileExists(ExpandConstant('{pf}\{#MyAppName}\somefile.exe'))) then
begin
MsgBox('Installation validated', mbInformation, MB_OK);
Result := True;
end
else
begin
MsgBox('Abort installation', mbCriticalError, MB_OK);
Result := False;
end;
end;