我编写了一个执行各种任务的帮助工具。它执行的任务之一是在本地打开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;
}
提前感谢您的任何帮助或建议。
此致
答案 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();
由于