【问题标题】:Why can .NET app not overwrite file when user is Administrator?当用户是管理员时,为什么 .NET 应用程序不能覆盖文件?
【发布时间】:2019-09-25 01:46:56
【问题描述】:

我的 WPF 应用程序将文件下载并缓存到 C:\ProgramData\CompanyName\ProductName\Data\ 目录。

如果其他用户在下载(创建)文件时已登录,即使我是管理员,我也无法覆盖该文件来更新它。

为什么我也是管理员用户时没有写入权限?
屏幕截图显示了我无法覆盖的文件的文件权限。

我知道我必须提升流程以执行“管理”任务 (as explained here),但看到其他用户是管理员(我也是),文件的“所有者”是'管理员' - 为什么我对所有者在同一组中的文件没有写权限?为什么我们不共享相同的特权?

【问题讨论】:

标签: c# .net file-permissions


【解决方案1】:

下载并保存文件后,您可以通过如下代码为所有用户(或任何其他适当的组)设置完全访问权限:

var fileSecurity = File.GetAccessControl(path);

fileSecurity.AddAccessRule(
    new FileSystemAccessRule(
        new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null),
        FileSystemRights.FullControl,
        AccessControlType.Allow));

File.SetAccessControl(path, fileSecurity);

【讨论】:

  • 允许所有用户修改文件存在安全风险,尤其是对于使用该目录中的可执行文件的应用程序
  • @Ferrybig 我们说的是 C:\ProgramData,而不是 C:\Programs。 OP 正在询问一些下载和缓存的文件,这些文件本质上应该是临时的。
  • @Clemens 但是为什么如果我授予新组“NewGroup”的权限,如果当前组“管理员”的所有成员都没有权限,那么为什么所有成员都具有写入权限?有什么区别?
  • @DefenestrationDay 您为您喜欢的任何 SecurityIdentifier 明确设置了 FileSystemRights.FullControl。看看 WellKnownSidType 枚举。
猜你喜欢
  • 1970-01-01
  • 2018-07-21
  • 2015-03-16
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2021-06-07
  • 2012-10-18
相关资源
最近更新 更多