Wix安装程序在修复时清空注册表设置

Wix安装程序在修复时清空注册表设置,wix,wix3.5,Wix,Wix3.5,目前,我已经定制了Wix_InstallDirDlg,使用户可以在安装时设置注册表项。InstallDirDlg和MaintenanceTypeDlg之后都会显示一个自定义对话框,以满足安装和修复场景的需要 “自定义”对话框有一个链接到属性的文本框。此属性具有注册表搜索,因此,如果用户修复或升级,则会保留以前的值,并因此显示在自定义对话框中供用户验证。该对话框在安装时工作正常,并且创建了注册表项。但是,修复时,将显示自定义对话框,并输入正确的注册表值(因此RegistrySearch正在工作),

目前,我已经定制了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>


我做错了什么?

我在发帖后马上设法解决了这个问题。我花了几乎一天的时间试图解决这个问题,所以希望这能减轻一些痛苦。您只需将该属性更改为安全属性

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

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


感谢您的澄清,现在可以理解为什么它不起作用了。令人遗憾的是,Wix编译器(或Orca)无法检测到我使用的属性应该是安全的!我同意穴居人的说法。windows installer中有很多陷阱。Wix确实比显而易见的帮助多了一点,但仍有改进的余地。