我有一个WIX捆绑软件,该捆绑软件当前允许用户更改默认安装目录。我想将默认安装目录更改为用户可以从注册表访问的字符串,然后再从注册表中访问它的字符串。
所需逻辑:
1. Set default directory (currently using '<Variable Name="InstallFolder"
Type="string" Value="C:\Users\Public"/>')
2. Get string from registry entry (currently using '<util:RegistrySearch
Id="InstallLocSearch" Variable="PrevInstallFolder" Root="HKLM"
Key="SOFTWARE\Company\App\InstallDir" Result="value"/>')
3. If the registry entry contains a non-empty string, override InstallFolder
with string, leave it alone otherwise (not sure what to do here)
4. Allow user to change install dir if desired (done in UI)
我想做的是在注册表搜索之后,使用另一个Variable元素将PrevInstallFolder变量分配给InstallFolder。但是,如何确保在注册表搜索发生后分配该变量?另外,仅在注册表字符串不为空的情况下如何分配它?
还有另一个类似的堆栈溢出条目,可以满足我想要的地址。区别在于,它检查目录是否存在。我对此并不在乎,因此该解决方案实际上并不适用。
答案 0 :(得分:0)
您可以在C#自定义操作中对该逻辑进行编码。
在该函数中,您可以将安装文件夹属性设置为所需的任何内容:
Session["INSTALLFOLDER"] = "C:\Yourdir\etc"
然后在目录定义片段中使用相同的属性名称。
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="DesktopFolder" Name="Desktop"/>
<Directory Id="Websites" Name ="Websites">
<Directory Id="INSTALLFOLDER" Name="It'll be as set in the CA">
<Directory Id="SUB_DIR" Name="sub_dir"> </Directory>
安排您的CA在CostFinalize之前运行。