我相信你需要设置属性Secure="yes"
对于 Property 元素,以便将相关属性添加到安全自定义属性 https://msdn.microsoft.com/en-us/library/windows/desktop/aa371571%28v=vs.85%29.aspx列表在您编译的 MSI 文件中。
Sample:
<Property Id="MYPROPERTY1" Secure="yes" Value="SomeValue" />
<Property Id="MYPROPERTY2" Secure="yes" Value="SomeOtherValue" />
由此产生的安全自定义属性 https://msdn.microsoft.com/en-us/library/windows/desktop/aa371571%28v=vs.85%29.aspx已编译的 MSI 中的值(还有两个自动生成的属性):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>
The 安全自定义属性 https://msdn.microsoft.com/en-us/library/windows/desktop/aa371571%28v=vs.85%29.aspx列出当安装用户不是管理员而是使用提升权限进行安装的标准用户时,可以发送到延迟模式(以提升的方式运行)的所有属性。要获得该问题的详细技术概述,请查看:受限制的公共财产 https://msdn.microsoft.com/en-us/library/windows/desktop/aa371243(v=vs.85).aspx.
题外话:
现在,强制性的离题:不久前有一个案例,我需要能够覆盖安全自定义属性 https://msdn.microsoft.com/en-us/library/windows/desktop/aa371571%28v=vs.85%29.aspx我自己出于某种原因 - 而不是根据具有的所有属性自动生成它Secure="yes"
标志设置。
在我的一生中,我现在记不起这种需求背后的推理细节。也许克里斯或菲尔会记得/知道类似的案例。我认为这与 WiX 自动神奇地添加到我的 MSI 的属性有关,但它们没有设置安全,我需要确保它们安全,以便在延迟模式下可靠地访问它们的值。我不记得它与 WiX 的哪些功能相关。