服务中 使用 CredentialManager 访问共享文件服务器的文件
时间: 2024-10-10 15:09:45 浏览: 26
在C#中,`CredentialManager`主要用于管理和存储用户的凭据,特别是对于Windows身份验证(如NTLM、Kerberos等)。如果你需要从服务中访问共享文件服务器,而该服务器要求Windows身份验证,可以使用`CredentialCache`来临时存储用户名和密码,以便后续自动登录。
下面是一个简单的步骤:
1. **获取当前凭据**:
```csharp
string username = "domain\\username"; // 替换为实际的用户名
SecureString password = new SecureString(); // 密码需要先设置然后填充
if (!CredentialCache.DefaultNetworkCredentials.Contains(username))
{
using (SecureString securePassword = new SecureString())
{
foreach (char c in password)
securePassword.AppendChar(c);
CredentialCache.DefaultNetworkCredentials.Add(username, SecureStringMarshal.SecureStringToBSTR(securePassword).ToPointer());
}
}
// 获取凭据
NetworkCredential credentials = CredentialCache.DefaultNetworkCredentials.GetCredential(new Uri("file:///" + sharedDrivePath), "Negotiate");
```
2. **使用凭据进行文件操作**:
现在有了凭据,你可以创建`DirectoryInfo`或`FileIOPermission`对象,使用`credentials`进行身份验证访问共享文件:
```csharp
FileInfo fileInfo = new FileInfo(sharedFilePath, credentials);
fileInfo.IsReadOnly = true; // 设置权限
fileInfo.Open(FileMode.Open, FileAccess.ReadWrite); // 打开文件
```
请注意,这种方法仅适用于Windows网络环境下的共享文件,而且不是长久之计,因为它会在进程结束时丢失凭据。如果你需要长期保存凭据,建议使用其他安全的方式,如之前提到的`System.Configuration`或专门的身份验证中间件。
阅读全文