【问题标题】:How can I programmatically determine if I have write privileges using C# in .Net?如何以编程方式确定我是否具有在 .Net 中使用 C# 的写入权限?
【发布时间】:2010-09-13 07:34:26
【问题描述】:

如何使用 .Net 中的 C# 确定我是否对我的 Intranet 中的远程计算机具有写入权限?

【问题讨论】:

    标签: c# .net networking file-permissions


    【解决方案1】:

    简单的答案是试试看。 Windows 安全 API 不适合胆小的人,您可能拥有写入权限而无权查看权限!

    【讨论】:

      【解决方案2】:

      查看此论坛帖子。

      http://bytes.com/forum/thread389514.html

      它描述了使用System.Security.AccessControl 命名空间中的对象来获取文件的ACL 权限列表。它仅在 .NET 2.0 及更高版本中可用。我认为它还假设您有一个 SMB 网络。如果您使用的是非 Windows 网络,我不确定它会做什么。

      如果您使用的不是 .NET 2.0 或更高版本,则可以使用通常的 pInvoke 和 Win32 API jazz。

      【讨论】:

        【解决方案3】:

        ScottKoon 写的是关于检查 Windows ACL 权限的文章。您还可以使用 CAS(代码访问安全)检查托管代码权限。这是 .Net 特定的限制权限的方法。注意,如果用户没有写权限,那么代码将永远不会有写权限(即使 CAS 说有) - 两者之间最严格的权限。

        CAS 非常易于使用 - 您甚至可以在方法的开头添加声明性属性。你可以在MSDN阅读更多内容

        【讨论】:

          【解决方案4】:

          也去过那里,我找到的最好和最可靠的解决方案是:

          bool hasWriteAccess = true;
          string remoteFileName = "\\server\share\file.name"
          
          try
          {
              createRemoteFile(remoteFileName);   
          }
          catch (SystemSecurityException)
          {
               hasWriteAccess = false;   
          }
          
          if (File.Exists(remoteFileName))
          {
              File.Delete(remoteFileName);
          }
          
          return hasWriteAccess;
          

          【讨论】:

          • 请记住,Windows 用户可能对文件或文件夹具有写入权限但没有对文件或文件夹的删除权限(有写入但不能修改)
          猜你喜欢
          • 2010-12-06
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          • 2010-09-27
          • 2014-09-07
          • 2011-06-23
          • 2018-12-14
          • 1970-01-01
          相关资源
          最近更新 更多