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