我设计了一个登录表单,并希望输入的用户名和密码作为变量存储,我可以在其他表单中调用(整个程序是.exe文件和powershell脚本的集合,我希望作为最初在登录表单中输入的用户名或密码运行(。
在程序开始时,我使用以下代码创建了"全局变量":
class usernameGlobalVariable
{
public static string var = "";
}
class passwordGlobalVariable
{
public static string var = "";
}
在登录表单中,我以这种方式将输入的用户名和密码存储到这些全局变量中:
private void usernameTextBox_TextChanged(object sender, EventArgs e)
{
usernameGlobalVariable.var = usernameTextBox.Text;
}
private void passwordTextBox_TextChanged(object sender, EventArgs e)
{
passwordGlobalVariable.var = passwordTextBox.Text;
}
当我想启动一个进程时,我使用以下代码调用它(以登录表单存储的用户名和密码运行它(:
string fileName = "c:\hdatools\Ping2.exe";
string arguments = "";
string domain = "vantage";
private void Button2_Click(object sender, EventArgs e)
{
Process.Start(
fileName,
arguments,
usernameGlobalVariable.var,
passwordGlobalVariable.var,
domain);
}
我得到的主要错误在线路passwordGlobalVariable.var,
上错误显示
参数4:无法从"string"转换为"System.Security.SecurityString">
我尝试了不同的方法来尝试将"passwordGlobalVariable.var"转换为安全字符串,或者将其内容提供给另一个字符串变量,然后将该变量呈现为安全字符串。我终于没什么主意了。提前感谢您的帮助。
参数4:无法从"string"转换为"System.Security.SecurityString">
因为var
是string
而不是SecureString
,所以看:
class passwordGlobalVariable
{
public static string var = "";
}
所以将其更改为:
class passwordGlobalVariable
{
public static SecureString var;
}
稍后,更改passwordTextBox_TextChanged
事件处理程序,将密码string
转换为SecureString
:
private void passwordTextBox_TextChanged(object sender, EventArgs e)
{
SecureString passWord = new SecureString();
foreach (char c in passwordTextBox.Text.ToCharArray())
{
passWord.AppendChar(c);
}
passwordGlobalVariable.var = passWord;
}
一个小的旁注:不要使用var
单词,因为它可能与C#的var
上下文关键字混淆。
下面的代码从字符串var:创建一个SecureString
SecureString passWord = new SecureString();
foreach (char c in var.ToCharArray())
passWord.AppendChar(c);
var secureUsername = new SecureString();
foreach (char c in usernameGlobalVariable.var)
{
secureUsername.AppendChar(c);
}
var securePassword = new SecureString();
foreach (char c in passwordGlobalVariable.var)
{
securePassword.AppendChar(c);
}
这将为您提供两个SecureStrings,您可以将其传递到Process.Start方法