C#在具有网络凭据的指定网络位置打开Windows资源管理器

时间:2016-09-01 14:46:13

标签: c#

我编写了一个执行各种任务的帮助工具。它执行的任务之一是在本地打开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对象中删除了Username和Password条目(假设我已经浏览过该网络位置并存储了用户名和密码),则此代码可以正常工作,但如果我添加它则停止工作。如果我尝试指定用户名和密码,即使用户名和密码正确,它也会引发异常并出现以下错误:

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

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

如果有帮助,GetPasswordAsSecureString函数如下所示。我使用它来传递密码字符串并返回一个ProcessSartInfo类所需的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;
}

提前感谢您的任何帮助或建议。

此致

1 个答案:

答案 0 :(得分:0)

在打开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();

由于