-1

我设计了一个登录表单,并希望将输入的用户名和密码存储为我可以在其他表单中调用的变量(整个程序是 .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.SecureString'

我尝试了不同的方法来尝试将“passwordGlobalVariable.var”转换为安全字符串,或者为另一个字符串变量提供其内容,然后将该变量呈现为安全字符串。我终于没有想法了。在此先感谢您的帮助。

4

3 回答 3

1

下面的代码从字符串 var 创建一个 SecureString:

   SecureString passWord = new SecureString();
   foreach (char c in var.ToCharArray())
                  passWord.AppendChar(c);
于 2014-06-18T20:51:27.333 回答
1

参数 4:无法从 'string' 转换为 'System.Security.SecureString'

因为var是 astring而不是 a 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上下文关键字混淆。

于 2014-06-18T20:50:23.970 回答
0
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 方法

于 2014-06-18T20:51:36.010 回答