我的程序应该安装在注册表中记录的路径中。如果找不到注册表项,则安装到另一个(默认)路径。
例如,我希望有类似的内容:
<Property Id="MYINSTALLDIR">
<RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
if not found, then set "MYINSTALLDIR" to "D:\working\defaultApps"
</Property>
如何编写我的wxs文件以实现此目的?
编辑:
现在的问题是:
if not found in registry, then set "MYINSTALLDIR" to LocalAppDataFolder
我试过
<Property Id="MYINSTALLDIR" Value="LocalAppDataFolder">
<RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
</Property>
但错误已退回:
Error 1606. Could not access network location LocalAppDataFolder.
答案 0 :(得分:6)
好的,我终于弄清楚该怎么做了。
使用Custom Action
,现在可以将默认值设置为另一个属性:
<Property Id="MYINSTALLDIR">
<RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
</Property>
<CustomAction Id="UserInstallDir" Property="InstallDir" Value="[INSTALLDIRCU]" Execute="immediate" />
<CustomAction Id="UserInstallDirDefault" Property="InstallDir" Value="[LocalAppDataFolder]" Execute="immediate" />
<InstallExecuteSequence>
<Custom Action="UserInstallDir" After="AppSearch">MYINSTALLDIR</Custom>
<Custom Action="UserInstallDirDefault" After="AppSearch">NOT MYINSTALLDIR</Custom>
</InstallExecuteSequence>
答案 1 :(得分:4)
从内存中可以看到以下示例。如果未找到搜索值,则属性将获取默认值。如果搜索成功,它只会被覆盖。
<Property Id="MYINSTALLDIR" Value="Default Property Value">
<RegistrySearch Id='MyRegistry' Type='raw' Root='HKCU' Key='Software\MyApp\Foo' Name='InstallDir' />
</Property>