ProcessStartInfo.Password不是一个可以写下来并分配给属性的简单字符串。您需要的是一个SecureString实例,并且无法创建一个 SecureString,将一个简单的字符串传递给它的构造函数。显然,操作系统没有允许不受信任的程序检索当前用户密码的 API 或方法(这将是有史以来最大的安全漏洞)。
所以,在我看来,你只剩下一个选择。要求您的用户再次输入密码,结果输入应转换为 SecureString
这个例子是我在这里看到的字符串类的扩展方法
using System.Security;
// ...
public static SecureString ConvertToSecureString(this string password)
{
if (password == null)
throw new ArgumentNullException("password");
unsafe
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}
您可以使用它来转换用户输入的密码并开始该过程
using(frmGetPassword fgp = new frmGetPassword())
{
if(DialogResult.OK == fgp.ShowDialog())
{
SecureString ss = fgp.Password.ConvertToSecureString();
var processInfo = new ProcessStartInfo
{
WorkingDirectory = workingDirectory,
FileName = "a name",
UserName = loggedUserName,
Password = ss,
Domain = userNameDomain,
UseShellExecute = false,
};
Process.Start(processInfo);
}
}