2016-12-05 10 views
2

この場合、特定のディレクトリにファイルをインストールする必要がありますが、別のコンピュータに別のフォルダにある可能性があります。 。例えばInno Setupあらかじめ定義されたセットからファイルをインストールするディレクトリを選択

、私はファイルを持って、それはAフォルダやBフォルダまたはCフォルダにインストールする必要があり、コンピュータに依存してはAまたはBまたはCを持っています。だから私はそれが」勝った私は、ディレクトリが存在しない場合、私は、ファイルのDestDir後に小切手を使用することができます知っている

など、コンピュータが Bを持っている場合は、 Bフォルダ内のファイルをインストールし、それらを最初にチェックする必要があります何かをインストールするが、私が必要なのは、そのファイルを他のディレクトリにインストールすることです。

ありがとうございます。

+0

「宛先の選択」で目的のフォルダを選択できないようにしたいのですか?代わりに、ターゲットマシンに存在する場所に応じて、自動的に場所を選択したいと思っています。 –

+0

ハードコードされたディレクトリセットを試す代わりに、何らかのレジストリキーを読むような正しい場所を選択する方法はありませんか? –

答えて

1

InitializeSetup event functionには、定義済みのディレクトリが存在するかどうかを確認し、見つかったものを覚えておいてください。次に、DefaultDirName directivescripted constantを使用して、デフォルトのインストールパスを見つけたパスに設定します。

DisableDirPage=yesUsePreviousAppDir=noも設定できます。

[Setup] 
DefaultDirName={code:GetDirName} 
DisableDirPage=yes 
UsePreviousAppDir=no 

[Files] 
Source: "MyProg.exe"; DestDir: "{app}" 
Source: "MyProg.chm"; DestDir: "{app}" 

[Code] 

var 
    DirName: string; 

function TryPath(Path: string): Boolean; 
begin 
    Result := DirExists(Path); 
    if Result then 
    begin 
    Log(Format('Path %s exists', [Path])) 
    DirName := Path; 
    end 
    else 
    begin 
    Log(Format('Path %s does not', [Path])) 
    end; 
end; 

function GetDirName(Param: string): string; 
begin 
    Result := DirName; 
end; 

function InitializeSetup(): Boolean; 
begin 
    Result := 
    TryPath('C:\path1') or 
    TryPath('C:\path2') or 
    TryPath('C:\path3'); 

    if Result then 
    begin 
    Log(Format('Destination %s selected', [DirName])) 
    end 
    else 
    begin 
    MsgBox('No destination found, aborting installation', mbError, MB_OK); 
    end; 
end; 

代わりのDefaultDirName={code:GetDirName}を使用して、適切な場合、あなたはまた、[Files]セクションの各エントリでDestDir: "{code:GetDirName}"を使用することができます。

+0

ありがとうございます!それは多くの助けになります! –

+0

C:\ path1とC:\ path2が存在するかどうか聞いてみてください。どちらのパスにもファイルをインストールしたいのですが、どうすればいいですか?ありがとう –

+0

@SabrinaLiu 'Files'セクションには2つのエントリが必要です。各フォルダに1つ。 –

関連する問題