3

私のプログラムはレジストリ内のパスにインストールされます。このパスには、単一ユーザーとすべてのユーザーの 2 つの異なる値があります。

だから私は次のようなものが欲しいです:

<Property Id="MYINSTALLDIR">
    if single user, then <RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
    else if ALLUSERS, then <RegistrySearch Id='MyRegistry' Type='raw' Root='HKLM' Key='Software\MyApp\Foo' Name='InstallDir' />
</Property>    

これは可能ですか?

4

2 に答える 2

2

2つの異なるプロパティに対して2つのレジストリ検索を実行してから、SetPropertyカスタムアクションを使用して、2つのプロパティの1つを、どちらがデータを持ち、どちらがより高い優先度を持っているかに基づいて、実際のプロパティに割り当てます(条件を使用して実行を駆動します)。

于 2012-08-09T16:47:31.750 に答える
1

最後に、それは今働いています...

wxsファイルの次のスニペットを使用するか、ALLUSER=1または2に渡してmsiexecHKLMレジストリ検索を有効にすることができます。

<Property Id="INSTALLDIR1">
    <RegistrySearch Id='RegistryCU' Type='raw' Root='HKCU' Key='Software\Foo' Name='InstallDir' />
</Property>

<Property Id="INSTALLDIR2">
    <RegistrySearch Id='RegistryLM' Type='raw' Root='HKLM' Key='Software\Foo' Name='InstallDir' />
</Property>

<CustomAction Id="PerUserInstall"    Property="InstallDir" Value="[INSTALLDIR1]" Execute="immediate" />
<CustomAction Id="PerMachineInstall" Property="InstallDir" Value="[INSTALLDIR2]" Execute="immediate" /> 
<InstallExecuteSequence>
    <Custom Action="PerUserInstall"    After="AppSearch">ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged))</Custom>      
    <Custom Action="PerMachineInstall" After="AppSearch">ALLUSERS=1  OR (ALLUSERS=2 AND Privileged)</Custom>
</InstallExecuteSequence>

ALLUSER私の場合、HKCUとHKLMの両方に値が含まれており、それらの優先度は同じであるため、コマンドラインでのプロパティを設定するしかありません。

于 2012-08-14T10:13:31.240 に答える