如何在.Net中使用C#以编程方式确定我是否具有写权限?
时间:2020-03-06 14:45:30 来源:igfitidea点击:
如何确定使用Cin .Net在我的Intranet中的远程计算机上是否具有写权限?
解决方案
简单的答案就是尝试一下。 Windows安全性API不适合胆小者,有可能我们具有写许可权而没有查看许可权!
查看此论坛帖子。
http://bytes.com/forum/thread389514.html
它描述了如何使用System.Security.AccessControl命名空间中的对象来获取文件的ACL权限列表。它仅在.NET 2.0及更高版本中可用。我认为它还假设我们具有SMB网络。我不确定如果使用非Windows网络会怎么做。
如果我们不是使用.NET 2.0或者更高版本,则通常是pInvoke和Win32 API爵士乐。
ScottKoon撰写有关检查Windows ACL权限的文章。我们还可以使用CAS(代码访问安全性)检查托管代码权限。这是.NET特定的限制权限的方法。请注意,如果用户没有写许可权,则代码将永远不会具有写许可权(即使CAS表示是这样),两次胜利之间的限制也最严格。
CAS非常易于使用,甚至可以在方法开始时添加声明性属性。我们可以在MSDN上阅读更多内容
到过那里,我发现的最好,最可靠的解决方案是:
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;