为所有用户设置 c:\program files\company\app\file 的文件权限

Chu*_*age 3 c# windows-services file-security

我有一个运行良好的自定义安装程序,但每次更新应用程序时它都会要求用户提供管理员权限。我正在创建一个跳过这部分的 Windows 服务,但 Windows 服务仅授予该文件的系统和管理员权限,并且用户无法执行新的更新。

为了纠正这个问题,我正在尝试(在文件下载/安装到正确的位置之后(从 Windows 服务中,它具有帐户 ServiceAccount.LocalSystem),

FileSecurity access = file.GetAccessControl();
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
access.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.ReadAndExecute, AccessControlType.Allow));
Run Code Online (Sandbox Code Playgroud)

但设置不生效。从这里我应该做什么?

Chu*_*age 5

我想到了。我只需要打电话,

file.SetAccessControl(access);
Run Code Online (Sandbox Code Playgroud)

在上述之后。显然,file.GetAccessControl 会传回访问控制的副本,而不是控制文件的文件权限的副本,直到您使用修改后的权限调用 file.SetAccessControl 为止。

我在该服务在 c:\ProgramData 中创建的另一个文件中发现了另一个警告,

  • 是该设置必须在文件写入之后发生。预先将设置应用于文件是无效的。