5

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

4

4 回答 4

6

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

于 2008-09-26T00:28:16.443 回答
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;
于 2008-09-26T08:02:28.333 回答
3

看看这个论坛帖子。

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

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

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

于 2008-09-26T00:41:21.310 回答
1

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

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

于 2008-09-26T01:14:15.303 回答