目前我已经定制了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>
我做错了什么?
答案 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