我是新手程序员。我需要编写桌面应用程序,用户输入用户名和密码。单击按钮后调用方法Start class Process。不幸的是,出现在错误消息System.ComponentModel.Win32Exception中,用户名或密码不正确。
我的代码:
//Download data
String user = this.textBoxUser.Text;
String pass = this.textBoxPassword.Text;
//Password
SecureString secret = SecureStringConverter.ConvertToSecureString(pass);
//Webbrowser
string file = "chrome.exe";
string domain = @"http://localhost:62074/";
//Process start
Process proc = new Process();
Microsoft.Win32.RegistryKey subKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command");
String DefaultBrowser = subKey.GetValue(null).ToString();
if (DefaultBrowser != null)
{
int startIndex = DefaultBrowser.IndexOf("\"") + 1;
int endIndex = DefaultBrowser.IndexOf("\"", startIndex);
string RegDefaultBrowserPath = DefaultBrowser.Substring(startIndex, endIndex - startIndex);
proc.StartInfo.FileName = RegDefaultBrowserPath;
proc.StartInfo.Arguments = domain;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.LoadUserProfile = false;
proc.StartInfo.UserName = user;
proc.StartInfo.Password = secret;
proc.Start();
}
此方法将字符串转换为SecureString
public static class SecureStringConverter
{
public static SecureString ConvertToSecureString(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;
}
}
}
}
答案 0 :(得分:0)
我认为你的方法不会奏效。至少不像你预期的那样简单。您可以通过启动具有显式凭据的Internet Explorer来对IIS中托管的应用程序进行身份验证,因为它们可能配置为使用域帐户进行身份验证。此方案主要用于Intranet Web应用程序。对于Crome来说,这是一个完全不同的故事。
您的方法的优点完全不明显。预计登录到Windows的用户凭据将用于身份验证。根据您的想法,这听起来更像是其他人为我登录Windows,并且我使用自己的凭据来运行Web应用程序,但仍然使用剩余的Windows应用程序与其他人的凭据。
以下文章应该让您了解它将依赖于基础架构支持和特定登录过程,而不仅仅是转发显式凭据以使其与对您的域一无所知的外部Web应用程序一起工作: