如何在 wix .wxs 文件中指定 <SecureCustomProperties Property="PROP1;PROP2"/>
How to specify <SecureCustomProperties Property="PROP1;PROP2"/> in wix .wxs file
我想在 Wix 安装程序的 wix .wxs 文件中将 属性 指定为受限 属性。
<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
、PROP2
私有/安全。
尝试将它们设为小写,但 RegistrySearch 不接受:
error CNDL0012 : The Property/@Id attribute's value, 'Prop1', cannot
contain lowercase characters.
因为这是一个搜索 属性,它也必须是一个 public 属性。这意味着 属性/@Id 值必须完全大写。
我认为您需要为 属性 元素设置属性 Secure="yes"
,以便将有问题的 属性 添加到您的 SecureCustomProperties 列表中已编译的 MSI 文件。
样本:
<Property Id="MYPROPERTY1" Secure="yes" Value="SomeValue" />
<Property Id="MYPROPERTY2" Secure="yes" Value="SomeOtherValue" />
编译后的 MSI 中的结果 SecureCustomProperties 值(还有两个 auto-generated 属性):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"
标志的属性 auto-generated。
对于我的生活,我现在不记得需要背后的推理细节。也许 Chris 或 Phil 会记得/知道类似的案例。我认为这与 WiX 添加 auto-magically 到我的 MSI 的属性有关,但它们没有设置安全,我需要确保它们安全,以便在延迟模式下可靠地访问它们的值。我不记得它与什么 WiX 功能有关。
我想在 Wix 安装程序的 wix .wxs 文件中将 属性 指定为受限 属性。
<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
、PROP2
私有/安全。
尝试将它们设为小写,但 RegistrySearch 不接受:
error CNDL0012 : The Property/@Id attribute's value, 'Prop1', cannot contain lowercase characters.
因为这是一个搜索 属性,它也必须是一个 public 属性。这意味着 属性/@Id 值必须完全大写。
我认为您需要为 属性 元素设置属性 Secure="yes"
,以便将有问题的 属性 添加到您的 SecureCustomProperties 列表中已编译的 MSI 文件。
样本:
<Property Id="MYPROPERTY1" Secure="yes" Value="SomeValue" />
<Property Id="MYPROPERTY2" Secure="yes" Value="SomeOtherValue" />
编译后的 MSI 中的结果 SecureCustomProperties 值(还有两个 auto-generated 属性):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"
标志的属性 auto-generated。
对于我的生活,我现在不记得需要背后的推理细节。也许 Chris 或 Phil 会记得/知道类似的案例。我认为这与 WiX 添加 auto-magically 到我的 MSI 的属性有关,但它们没有设置安全,我需要确保它们安全,以便在延迟模式下可靠地访问它们的值。我不记得它与什么 WiX 功能有关。