C#使用网络凭据在指定的网络位置打开windows资源管理器

C#使用网络凭据在指定的网络位置打开windows资源管理器,c#,C#,我已经编写了一个助手工具,可以执行各种任务。它执行的任务之一是在本地打开Windows资源管理器窗口,指向网络上的PC。类似于手动打开Windows资源管理器并在路径\\192.168.201.111\c$中输入网络位置 我使用内置的Process类完成了这项工作: var processInfo = new ProcessStartInfo { Arguments = GetFullPathCDRive(), /*This results in something like:

我已经编写了一个助手工具,可以执行各种任务。它执行的任务之一是在本地打开Windows资源管理器窗口,指向网络上的PC。类似于手动打开Windows资源管理器并在路径\\192.168.201.111\c$中输入网络位置

我使用内置的Process类完成了这项工作:

var processInfo = new ProcessStartInfo
{
    Arguments = GetFullPathCDRive(), /*This results in something like:      \\192.168.202.179\c$*/
    FileName = "explorer.exe",
    UserName = Username,
    Password = GetPasswordAsSecureString(),
    Domain = Domain,
    UseShellExecute = false,
};
Process.Start(processInfo);
如果我从processinfo对象中删除用户名和密码条目(假设我已经浏览到该网络位置并存储了用户名和密码),但如果我添加了用户名和密码,则该代码可以正常工作。如果我尝试指定用户名和密码,即使用户名和密码正确,也会引发异常,并出现以下错误:

{“登录失败:未知用户名或错误密码”}

有人知道我为什么会得到这个例外吗?我是否应该尝试以不同的方式实现这一点,即不使用内置的C#Process类,或者使用一些底层的Windows调用

GetPasswordAsSecureString函数如有帮助,如下所示。我使用它传入密码字符串并返回ProcessStartInfo类所需的SecureString:

public SecureString GetPasswordAsSecureString()
{
    if (Password == null)
        throw new ArgumentNullException("password");

    var securePassword = new SecureString();

    foreach (char c in Password)
        securePassword.AppendChar(c);

    securePassword.MakeReadOnly();
    return securePassword;
}
提前感谢您的帮助或建议


关于

在打开Windows资源管理器时,我找不到传递用户名和密码的方法,但我想发布我最终使用的解决方案,以防它对其他人有帮助

为了解决这个问题,我使用凭据管理库在打开资源管理器之前将凭据添加到Windows凭据管理器。这与事先浏览网络路径,并在提示时添加凭据,要求Windows记住凭据的效果相同

 using CredentialManagement;

 return new Credential
 {
     Target = target,
     Type = CredentialType.DomainPassword,
     PersistanceType = PersistanceType.Enterprise,
     Username = string.Format("{0}\\{1}", NetworkManager.DOMAIN, username),
     Password = password,
 }.Save();
谢谢