2012-10-18 21 views
9

ファイルが保存先に存在するかどうかを確認する必要があります。私のプロジェクトはアップデートパッチですので、アプリケーションのメインのexeがデスティネーションにない場合、インストーラはアップデートファイルをインストールしないようにします。これどうやってするの?Inno Setup - ファイルが保存先に存在するかどうかを確認します。インストールが中止されない場合は、

誰かが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; 
+1

通常は、アップデートインストーラーのために、あなただけの同じのAppIDを使用し、そして革新はあなたのための残りを処理します。詳細については、[この記事](http://www.vincenzo.net/isxkb/index.php?title=Upgrades)を参照してください。 – Deanna

答えて

10

正しいフォルダを選択するまでユーザーに進むことはできません。

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; 

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

+0

これは私のために完璧に動作します...ありがとう! – Dielo

+0

だから、あなたは[答えを受け入れる]べきです(http://meta.stackexchange.com/a/5235/179541)。とにかく、質問でインストールを中止したいと言ってきました。まあ、気にしないで... – TLama

+0

これは効果的に中止です。対話型インストールでは、パスを修正するか、キャンセルする以外のオプションはユーザに与えられません。非インタラクティブ(サイレント)インストールの場合、インストールは中止されます。 (ただし、サイレントインストールが必要な場合は、代わりに「SuppressibleMsgBox」を使用する必要があります) – Miral

3

別の解決策は、InitializeSetup()次のようになります。

クレジット:Manfred

[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; 
関連する問題