3

我的程序将安装到注册表中的路径,该路径对于单个用户和所有用户有两个不同的值。

所以我想要类似的东西:

<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

对两个不同的属性执行两次注册表搜索,然后使用 SetProperty 自定义操作将这两个属性之一分配给实际属性,基于哪个具有数据,哪个具有更高的优先级(使用条件来驱动执行)。

于 2012-08-09T16:47:31.750 回答
1

最后,它现在正在工作......

在 wxs 文件中使用以下代码段,ALLUSER=1或者2可以传递给以msiexec启用 HKLM 注册表搜索。

<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>

在我的例子中,HKCU 和 HKLM 都包含值并且它们具有相同的优先级,所以唯一的方法是ALLUSER在命令行中设置属性。

于 2012-08-14T10:13:31.240 回答