如果存在,如何将WIX捆绑包的默认安装位置设置为注册表字符串?

时间:2019-01-23 20:16:52

标签: wix install burn

我有一个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。但是,如何确保在注册表搜索发生后分配该变量?另外,仅在注册表字符串不为空的情况下如何分配它?

还有另一个类似的堆栈溢出条目,可以满足我想要的地址。区别在于,它检查目录是否存在。我对此并不在乎,因此该解决方案实际上并不适用。

1 个答案:

答案 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之前运行。