Wix安装程序在修复时清空注册表设置
目前,我已经定制了Wix_InstallDirDlg,使用户可以在安装时设置注册表项。InstallDirDlg和MaintenanceTypeDlg之后都会显示一个自定义对话框,以满足安装和修复场景的需要 “自定义”对话框有一个链接到属性的文本框。此属性具有注册表搜索,因此,如果用户修复或升级,则会保留以前的值,并因此显示在自定义对话框中供用户验证。该对话框在安装时工作正常,并且创建了注册表项。但是,修复时,将显示自定义对话框,并输入正确的注册表值(因此RegistrySearch正在工作),但修复完成后,键值为空Wix安装程序在修复时清空注册表设置,wix,wix3.5,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>
我做错了什么?我在发帖后马上设法解决了这个问题。我花了几乎一天的时间试图解决这个问题,所以希望这能减轻一些痛苦。您只需将该属性更改为安全属性
<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确实比显而易见的帮助多了一点,但仍有改进的余地。