我想运行以下代码。
我正在调用的应用程序需要使用User-Name = albert next line,另一个命令等命令,直到完成为止。
如果您要从命令行手动输入,请键入command,按enter键,输入命令按enter键。在最后一个命令后按下ENTER后,你会按Ctrl + D结束它,运行程序并回来说明发生了什么。
如果输入错误的命令,应用程序会说“expecting =”意味着您发送了一行格式不正确的行...
所以我在下面做的是模拟手动输入,一个命令,新行,一个命令,新行等,直到结束,然后我只是在最后一个命令后追加Ctrl + D.这不起作用,程序说“expecting =”
有任何明显的问题吗?
感谢您的时间。 阿尔伯特
// 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);
答案 0 :(得分:2)
您需要使用反斜杠("\x04"
)编写附加\
有关详细信息,请参阅documentation(字符串转义序列部分)
答案 1 :(得分:0)
sb.Append("/x4");
这不是控制-D
也许你的意思是
sb.Append("\x04");