如何在wix .wxs文件中指定<securecustomproperties property =“PROP1; PROP2”>

时间:2018-04-11 07:14:06

标签: wix windows-installer

我想在Wix安装程序中将属性指定为受限属性,位于wix .wxs文件中。

.as-console-wrapper { max-height: 100% !important; top: 0; }

有什么想法吗?

想要 <Property Id="PROP1"> <RegistrySearch Id="Prop1" Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\mysvc" Name="installers" Type="raw" /> </Property> <Property Id="PROP2"> <RegistrySearch Id="Prop2" Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\mysvc" Name="DisplayName" Type="raw" /> </Property> PROP1私人/安全。

尝试将它们设为小写但RegistrySearch不接受它:

  

错误CNDL0012:Property / @ Id属性的值'Prop1'不能   包含小写字符。

由于这是搜索属性,因此它也必须是公共属性。这意味着Property / @ Id值必须完全为大写。

1 个答案:

答案 0 :(得分:0)

我认为您需要为Property元素设置属性Secure="yes",以便将相关属性添加到已编译的MSI文件中的SecureCustomProperties列表中。

<强> 示例

<Property Id="MYPROPERTY1" Secure="yes" Value="SomeValue" /> 
<Property Id="MYPROPERTY2" Secure="yes" Value="SomeOtherValue" /> 

编译的MSI中的结果SecureCustomProperties值(还有两个自动生成的属性):MYPROPERTY1;MYPROPERTY2;WIX_DOWNGRADE_DETECTED;WIX_UPGRADE_DETECTED

您的案例

所以在你的情况下,如下所示(我将属性值设置为0,以防注册表搜索找不到任何内容 - 然后我有一个默认值):

<Property Id="PROP1" Secure="yes" Value="0" >
   <RegistrySearch Id="Prop1"
                   Root="HKLM"
                   Key="SYSTEM\CurrentControlSet\Services\mysvc"
                   Name="installers"
                   Type="raw" />
</Property>

SecureCustomProperties列出了当安装用户不是管理员时,可以发送到延迟模式的所有属性 - 运行提升 - 但是使用提升权限进行安装的标准用户。有关该问题的良好技术概述,请查看:Restricted Public Properties

<强> 题外话

现在,强制性离题:当我因某种原因需要能够覆盖SecureCustomProperties的值时,有一段时间的情况 - 而不是让它自动 - 基于设置了Secure="yes"标志的所有属性生成。

对于我的生活,我现在不记得需要背后的推理细节。也许克里斯或菲尔会记得/知道类似的情况。我认为这与通过WiX自动魔法添加到我的MSI的属性有关,但它们没有设置安全性,我需要使它们安全,以便在延迟模式下可靠地访问它们的值。我不记得它与之相关的WiX功能。