4

我正在尝试使用 NSIS 中的AccessControl 插件来设置注册表项的权限。它不工作。安装程序运行后,所有用户组没有完全控制。

我在下面创建了一个示例。这里有什么问题吗?是否有另一种机制来完成同样的事情?我还尝试使用所有人组 S-1-1-0 的数字形式,我还没有尝试使用“所有人”。

  ; Create the key for local machine settings (could be a 32 bit or 64 bit location)
  SetRegView 32
  WriteRegStr HKLM "SOFTWARE\MyApp" "x" "y"
  SetRegView 64
  WriteRegStr HKLM "SOFTWARE\MyApp" "x" "y"

  ; Give all authenticated users (BUILTIN\Users) full access on the registry key HKEY_LOCAL_MACHINE\Software\MyApp
  SetRegView 32
  AccessControl::GrantOnRegKey HKLM "SOFTWARE\MyApp" "BUILTIN\USERS" "FullAccess"
  SetRegView 64
  AccessControl::GrantOnRegKey HKLM "SOFTWARE\MyApp" "BUILTIN\USERS" "FullAccess"

起初,我没有理会这两个注册表视图。但经过实验,为了排除 WOW6432Node 的问题,我将命令加倍。我希望没有必要。

4

1 回答 1

4

当使用带有插件的 SID 时,语法是(S-1-....)

WriteRegStr HKCU "Software\test" hello world
AccessControl::GrantOnRegKey HKCU "Software\test" "(S-1-1-0)" "FullAccess" ; Everyone

您可以在此处找到 SID 列表

您可以使用AccessControl::NameToSid将名称转换为其 SID,但这样做可能会在非英语系统上出现本地化问题:

AccessControl::NameToSid "BUILTIN\USERS"
Pop $0
StrCmp $0 "error" +2
AccessControl::GrantOnRegKey HKCU "Software\test" "($0)" "FullAccess"

更改所有者时,您还可以使用Machine\Username语法。

别名之类(BU)的仅适用于 unicode 版本,并且还取决于 Windows 版本,因此最好只使用 SID。

于 2013-03-13T22:08:30.610 回答