修复时,Wix安装程序会清除注册表设置

时间:2011-05-13 19:08:07

标签: wix wix3.5

目前我已经定制了Wix_InstallDirDlg以使用户能够在安装时设置注册表项。在InstallDirDlg和MaintenanceTypeDlg之后会显示一个自定义对话框,以便它适合安装和修复方案。

自定义对话框有一个链接到属性的文本框。此属性具有注册表搜索,以便在用户修复或升级时保留先前的值,并因此显示在自定义对话框中以供用户验证。该对话框在安装时工作正常,并创建了注册表项。但是,在修复时,会出现自定义对话框,并输入正确的注册表值(因此RegistrySearch正在运行),但修复完成后,键值为空。

<Property Id='SERVER_LISTEN_URL'>
          <RegistrySearch Id='ServerListenUrlRegSearch' Root='HKLM'
                          Key='SOFTWARE\$(var.Manufacturer)\$(var.Name)'
                          Name='ServerListenUrl'
                          Type='raw' Win64='no' />
        </Property>

<Component Id="RegistryEntries" Guid="0234974B-6158-4312-90A7-56869809B42E">
        <RegistryKey Id="ServerRegKey"
              Root="HKLM"
              Key='SOFTWARE\$(var.Manufacturer)\$(var.Name)'
              Action='createAndRemoveOnUninstall'>
          <RegistryValue Id="ServerListenUrlRegVal"
                         Name='ServerListenUrl'
                         Value='[SERVER_LISTEN_URL]'
                         KeyPath='yes'
                         Type='string' />
        </RegistryKey>
</Component>

<Dialog Id="SettingsDlg">
    <Control Id="ListenUrl" Type="Edit" X="20" Y="100" Width="320" Height="18" Property="SERVER_LISTEN_URL" Indirect="no" />
</Dialog>

我做错了什么?

2 个答案:

答案 0 :(得分:7)

我发布后,我设法自己解决了这个问题。我花了一天时间试图解决这个问题,所以希望这会节省一些痛苦。您需要做的就是将属性更改为安全属性。

<Property Id='SERVER_LISTEN_URL' Secure='yes'>
      <RegistrySearch Id='ServerListenUrlRegSearch' Root='HKLM'
                      Key='SOFTWARE\$(var.Manufacturer)\$(var.Name)'
                      Name='ServerListenUrl'
                      Type='raw' Win64='no' />
</Property>

答案 1 :(得分:3)

安全属性可以在“提升安装”期间将其内容从客户端进程(在用户上下文中运行)传递到服务器进程(在系统上下文中运行)。换句话说,由非管理员用户调用的安装。不要过于慷慨地确保哪些属性是安全的,但绝对要添加升级表中使用的所有属性,以及GUI中用于关键信息的任何特殊属性。

http://msdn.microsoft.com/en-us/library/aa371571(v=vs.85).aspx