使用SID写入注册表以获取权限而不是组名

时间:2016-10-24 13:53:08

标签: wix registry sid

在编写注册表值时,有没有办法使用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文档中没有关于此类内容的信息。

1 个答案:

答案 0 :(得分:1)

我有一个非常类似的问题,可以解决它:

  • 使用Wix Util Extension中的<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