在编写注册表值时,有没有办法使用SID而不是组名?例如。目前我有:
<Component Id="RegistryEntries" Guid="{------sanitized------}">
<RegistryKey Root="HKLM" Key="------sanitized------" ForceCreateOnInstall="yes">
<Permission User="Users" GenericRead="yes" Read="yes" GenericWrite="yes" />
<RegistryValue Name="ServerName" Action="write" Type="string" Value="" KeyPath="yes">
<Permission User="Users" GenericRead="yes" Read="yes" GenericWrite="yes" />
</RegistryValue>
</RegistryKey>
</Component>
通常有效,但在非英语语言中失败,因为&#34;用户&#34;正在翻译的名称。如果我将Permission元素更改为SID,它应该工作(imo),但它不会:
<Component Id="RegistryEntries" Guid="{------sanitized------}">
<RegistryKey Root="HKLM" Key="------sanitized------" ForceCreateOnInstall="yes">
<Permission User="S-1-5-32-545" GenericRead="yes" Read="yes" GenericWrite="yes" />
<RegistryValue Name="ServerName" Action="write" Type="string" Value="" KeyPath="yes">
<Permission User="S-1-5-32-545" GenericRead="yes" Read="yes" GenericWrite="yes" />
</RegistryValue>
</RegistryKey>
</Component>
相反,它试图搜索字面上称为&#34; S-1-5-32-545&#34;的组。有没有办法做我想在这里做的事情?我知道其他非wix安装程序可以执行此操作,但wix文档中没有关于此类内容的信息。
答案 0 :(得分:1)
我有一个非常类似的问题,可以解决它:
<PermissionEx>
而不是使用
<Permission>
。WixQueryOsWellKnownSID
获取Users组的本地化名称。首先,您需要将WixUtilExtension引用添加到项目中。 然后,您需要将WixUtil名称空间添加到您的wxs源文件中:
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
现在您可以使用Wix Util Extension中的PermissionEx
元素:
<util:PermissionEx User="[WIX_ACCOUNT_USERS]" GenericAll="yes" />
要使属性WIX_ACCOUNT_USERS
可用,您需要(隐式)通过向WixQueryOsWellKnownSID
添加属性引用来调用内置自定义操作<Product>
:
<PropertyRef Id="WIX_ACCOUNT_USERS" />
这适用于我在Windows 10(英语和德语)上使用Wix 3.10