【问题标题】:Allow File to be Read by Non-Admin User Process允许非管理员用户进程读取文件
【发布时间】:2014-04-29 15:30:38
【问题描述】:

我的安装程序以提升的权限运行并将文件 (A) 写入 $APPDATA (C:/ProgramData) 以及将文件写入 $PROGRAMFILES。文件 A 是一个名为 Revit 的应用程序读取的 .addin 文件。

我的问题:因为文件 A 是由管理员进程创建的,所以当用户是非管理员 windows 用户时,Revit 无法读取此文件。

我想编辑文件A 以便非管理员 windows 用户可以读取它,但我不知道怎么做。你能建议我如何做到这一点吗?

我尝试过使用 NSIS 函数 SetFileAttributes "myFilePath.addin" NORMAL 但这不起作用。

注意:我知道我可以在没有提升权限的情况下运行我的安装程序,然后 Revit 可以读取该文件,但正如我上面提到的,我的安装程序也会写入 $PROGRAMFILES,所以我需要提升权限。

【问题讨论】:

  • $APPDATA 不是 C:\ProgramData 除非您先执行SetShellVarContext all。您能否澄清一下您是在谈论用户 %APPDATA% 还是共享的 %ALLUSERSPROFILE%?
  • %ALLUSERSPROFILE% 和 %PROGRAMDATA% 下的文件不应由非管理员修改。这是一个共享位置,当多个用户更改文件时,事情就会中断。 (使用“切换用户”或远程桌面时,两个不同的用户可以同时访问该文件!)

标签: windows nsis file-permissions user-permissions


【解决方案1】:

使用AccessControl plugin 更改DACL:

; This gives read access to the everyone group, use (BU) or (S-1-5-32-545) for BUILTIN\Users
AccessControl::GrantOnFile "$INSTDIR\myfile" "(S-1-1-0)" "GenericRead" 

【讨论】:

  • 非常感谢它按需要工作。也感谢您的快速回复:D
  • usa.autodesk.com/adsk/servlet/… 并没有真正指定需要哪些权限,所以我确信通用读取是可以的。 help.autodesk.com/view/RVT/2014/ENU/… 表明每用户 $appdata 安装也是可能的。
  • 我猜这可能与“系统对象:管理员组成员创建的对象的默认所有者”有关,该设置取决于操作系统版本和工作站与服务器。如果将其设置为 false,您将拥有该文件并有权访问...
  • 嗯,是的,土木工程公司的计算机被他们的 IT 人员锁起来,就像诺克斯堡一样。每个土木工程师/建筑师都是受限用户。要求 IT 人员更改计算机权限和设置并给土木工程师一英寸的“移动空间”将比解决中东危机更难
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 2020-11-13
  • 2020-12-24
  • 1970-01-01
  • 2017-01-13
相关资源
最近更新 更多