C#通过进程的StandardInput传递密码

本文关键字:密码 StandardInput 进程 | 更新日期: 2023-09-27 18:16:42

下一个C#方法调用rasdial VPN-Name name **表示从键盘输入密码。但我想将密码从C#应用程序传递给进程。

  public bool connect(UserCredentials userCredentials)
  {
    // "Dial" to VPN
    var psi = new ProcessStartInfo("rasdial")//("cmd")
    {
      RedirectStandardInput = true,
      RedirectStandardOutput = true,
      RedirectStandardError = true,
      //CreateNoWindow = true,
      UseShellExecute = false,  // Unusable if Streams redirected
      Arguments = $"{InterfaceName} {userCredentials.name} *"
    };
    var proc = new Process {
      StartInfo = psi
      //,EnableRaisingEvents = true
    };
    proc.Start();
    // PASS PASSWORD VIA STDIN. Does not work. Keyboard input FORCED!
    //proc.WaitForInputIdle();
    proc.StandardInput.WriteLine(userCredentials.pass);
    proc.WaitForExit();
    return true;// proc.ExitCode == 0;  // Can throws "Not exited yet"
  }

有没有办法将密码传递给rasdial

我可以调用rasdial VPN-Name login passwd这种方法缺乏安全性。弃用<任何男生都可以监控进程的args>

C#通过进程的StandardInput传递密码

一个解决方法

static Process runProcRasdial()
{
    ProcessStartInfo psi = new ProcessStartInfo("cmd") {
        RedirectStandardInput=true,
        RedirectStandardOutput=false,
        UseShellExecute=false
    };
    var proc = new Process(){
        StartInfo = psi,
        EnableRaisingEvents = true,
    };
    proc.Start();
    proc.StandardInput.WriteLine("rasdial rapa /disconnect");
    proc.StandardInput.WriteLine("rasdial rapa Ivan paswd!");
    //proc.Exited += Proc_Exited1;
    proc.StandardInput.WriteLine("exit");
    proc.WaitForExit();
    return proc;
}

如果packpaswdSecureString,如果看起来正常的话。