0

我一直在使用 NSIS 作为 Windows 7 机器上的打包工具。

我已经非常小心地将文件所有权和权限设置为我想要在源目录中的内容。

但是,当我执行打包然后部署包时,它已将所有文件所有权更改为“管理员”。

我最初拥有“RequestExecutionLevel admin”,但即使在删除该行之后,NSIS 仍继续以“Administrators”作为所有者部署文件。

这让我非常头疼。

我很感激这方面的任何线索。

我已经部署了“AccessControl”插件,但还没有找到它的文档,所以这也很有用。

4

2 回答 2

1

NSIS 不保留源目录中的权限(这会很烦人,并且不适用于 FAT32 和 Posix)

Windows 中有一个组策略设置,它决定管理员组中的用户创建的文件是属于所有管理员还是属于单个用户。

OutFile Test.exe
RequestExecutionLevel user
InstallDir "$Temp\Test"

Section
SetOutPath "$InstDir"

!addplugindir "C:\NSIS\MyDownloadedPlugins\AccessControl\Plugins\"
AccessControl::SetFileOwner "$InstDir" "Anders"
Pop $0
DetailPrint $0

; S-1-5-32-545 is BUILTIN\Users
AccessControl::GrantOnFile "$InstDir" "(S-1-5-32-545)" "GenericRead + AddFile + AddSubdirectory"
Pop $0
DetailPrint $0

AccessControl::DenyOnFile "$InstDir" "(BA)" "AddFile" ; Silly example: Don't let people in the Administrators group create new files
Pop $0
DetailPrint $0

SectionEnd
于 2015-04-10T23:56:31.090 回答
0

我认为RequestExecutionLevel的这一部分可能解释了我在 NSIS 将所有权设置为管理员时遇到的问题。

4.8.1.34 请求执行级别

无|用户|最高|管理员

为 Windows Vista 和更高版本指定请求的执行级别。该值嵌入在安装程序和卸载程序的 XML 清单中,并告诉 Windows 安装程序需要哪个权限级别。用户请求没有管理权限的普通用户级别。highest 将请求当前用户可用的最高执行级别,并将导致 Windows 提示用户验证权限升级。提示可能会要求用户输入密码。admin 请求管理员级别,并将导致 Windows 也提示用户。指定无,这也是默认设置,将保持清单为空并让 Windows 决定所需的执行级别。Windows 自动识别 NSIS 安装程序并决定是否需要管理员权限。因此, none 和 admin [和 default]具有几乎相同的效果。

至少 Microsoft 建议每个应用程序都标有所需的执行级别。未标记的安装程序受兼容模式的约束。此模式的解决方法包括自动将用户开始菜单中创建的任何快捷方式移动到所有用户的开始菜单。无需将任何内容安装到系统文件夹或写入本地计算机注册表 (HKLM) 的安装程序应指定用户执行级别。

可以在 MSDN 上找到有关此主题的更多信息。

基本上将请求的访问级别设置为user|highest以外的任何内容或不设置它会导致所有内容都设置为admin

我的解决方案是将请求的访问级别设置为user

于 2015-04-13T17:42:43.757 回答