Я хочу запустить следующий код.
Приложение, которое я вызываю, ожидает команды типа User-Name = albert на следующей строке, другой команды и т. Д., Пока вы не закончите.
Если вам нужно было ввести это вручную из командной строки, вы бы набрали команду, нажмите ввод, введите команду нажмите ввод.В самом конце ПОСЛЕ НАЖИМА ВВОДА после последней команды вы должны нажать Ctrl + D, чтобы завершить ее, запустить программу и вернуться с сообщением о том, что произошло.
Если вы введете команду неправильно, приложение скажет "ожидание = "означает, что вы отправили строку, которая не отформатирована правильно ...
Итак, что я делаю ниже, это симуляция ввода этой строки вручную, одна команда, новая строка, одна команда, новая строка и т. д.,до конца, тогда я просто добавляю Ctrl + D после последней команды.Это не работает, и программа говорит "ожидание ="
Есть ли очевидные проблемы?
Спасибо за ваше время.Альберт
// CREATE DISCONNECT FILE
StringBuilder sb = new StringBuilder();
sb.AppendLine("User-Name=" + this.userName);
sb.AppendLine("Acct-Session-Id=" + this.sessionID);
sb.AppendLine("NAS-IP-Address=" + Setting.Item["EDGE.NASIP"]);
sb.AppendLine("Framed-IP-Address=" + this.currentIP);
sb.Append("/x4");
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo();
procStartInfo.WorkingDirectory = radclientPath.Substring(0, radclientPath.LastIndexOf("\\"));
procStartInfo.FileName = radclientPath;
procStartInfo.Arguments = @"-r 1 -d ..\etc\raddb -x 192.168.1.240:3799 disconnect password";
procStartInfo.RedirectStandardInput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
System.Diagnostics.Process proc = System.Diagnostics.Process.Start(procStartInfo);
proc.StandardInput.Write(sb.ToString());
proc.WaitForExit(5000);
if (proc.HasExited)
{
System.IO.File.WriteAllText(@"D:\temp.txt", proc.StandardOutput.ReadToEnd());
System.IO.File.WriteAllText(@"D:\temp2.txt", proc.StandardError.ReadToEnd());
string message = proc.StandardOutput.ReadToEnd() + "\n---\nErrors:\n---\n" + proc.StandardError.ReadToEnd();
return message;
}
System.IO.File.WriteAllText(@"D:\temp.txt", proc.StandardOutput.ReadToEnd());
System.IO.File.WriteAllText(@"D:\temp2.txt", proc.StandardError.ReadToEnd());
return "";
}
Я также попробовал сделать это в одинарных кавычках и с нулем, начинающимся с числа (\ x04) и ничего, поэтому я попытался записать то, что должно быть отправлено в программу, в текстовый файл.Затем я запустил программу, используя те же параметры командной строки, что и ниже.Скопировал то, что было во всем текстовом файле, и вставил его в командную строку, и это прекрасно работает.Не уверен, почему он не отправляется на стандартный ввод.
StringBuilder sb = new StringBuilder();
sb.AppendLine("User-Name=" + this.userName);
sb.Append('\x04');
System.IO.File.WriteAllText(@"D:\input.txt", sb.ToString());
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo();
procStartInfo.WorkingDirectory = radclientPath.Substring(0, radclientPath.LastIndexOf("\\"));
procStartInfo.FileName = radclientPath;
procStartInfo.Arguments = @"-r 1 -d ..\etc\raddb -x 192.168.1.240:3799 disconnect password";
procStartInfo.RedirectStandardInput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
System.Diagnostics.Process proc = System.Diagnostics.Process.Start(procStartInfo);
proc.StandardInput.Write(sb.ToString());
proc.WaitForExit(5000);