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>任何男生都可以监控进程的args>
一个解决方法
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;
}
如果packpaswd到SecureString
,如果看起来正常的话。