web-dev-qa-db-ja.com

Inno Setup-ファイルが宛先に存在するかどうか、またはインストールを中止しないかどうかを確認します

インストーラーでファイルが宛先の場所に存在するかどうかを確認する必要があります。存在しない場合、インストールは中止されます。私のプロジェクトは更新パッチなので、アプリケーションのメイン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;
13
Dielo

正しいフォルダを選択するまで、ユーザーに先に進まないでください。

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;

もちろん、それらに適したフォルダを自動的に選択することもお勧めします。レジストリから正しい場所を取得する。

15
Miral

別の解決策は 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;
5
Tanckom