C# - Process.Start - 使用全局变量作为密码 - "无法从'字符串'转换为'System.Security.SecureString'



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

因为varstring而不是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方法

相关内容

  • 没有找到相关文章

最新更新