这是我第一次使用带有多个参数的ProcessStartInfo,而且我精打细算地使我的代码正常工作。我不断收到错误或以下错误的某种版本,具体取决于是否或如何在参数字符串中使用转义。
我尝试了多个stackoverflow代码段,并从MSDN中读取了所有可以读取的内容。
MSDN指示应转义空格。当我这样做时会收到一个错误...如果不对参数进行转义,也会收到一个错误。在textBox1.Text中显示以下错误...
[1]:找不到以下命令:“ trace start capture = yes report = nopersistant = no traceFile = C:\ temp \ mynettrace.etl“。
但是,当我从WinForms
Button
单击启动它时,它不喜欢我配置参数的方式。
我查阅了显示多个args的MSDN参考,但我一定不会想清楚。
我在做什么错了?
namespace Remote_Site_Tools
{
public partial class DegradationCaptureForm : Form
{
public StringBuilder output = new StringBuilder("");
public DegradationCaptureForm()
{
InitializeComponent();
}
private void DegradationCaptureStartButton_Click(object sender, EventArgs e)
{
DegradationFunction();
}
public void DegradationFunction()
{
int lineCount = 0;
this.textBox1.Text = "";
Process process = new Process();
process.StartInfo.FileName = "netsh.exe";
process.StartInfo.Arguments = "trace start capture=yes report=no persistent=no traceFile=C:\\temp\\mynettrace.etl";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
{
// Prepend line numbers to each line of the output.
if (!String.IsNullOrEmpty(e.Data))
{
lineCount++;
output.AppendLine("[" + lineCount + "]: " + e.Data);
}
});
process.Start();
// Asynchronously read the standard output of the spawned process.
// This raises OutputDataReceived events for each line of output.
process.BeginOutputReadLine();
process.WaitForExit();
// Write the output of the stringbuilder to the textbox
textBox1.Text = output.ToString();
process.Close();
}
}
}
答案 0 :(得分:0)
我看到了这个问题,并且很好奇为什么我们看到了不同的响应-一个无法正常工作的响应,而表明它仍然有效的响应。也许我是受虐狂,但我深究这一点并找到了答案。
NETSH是基于脚本的Shell环境,可在各种上下文中运行。上下文由相关DLL提供,这些DLL在建立每个上下文时加载。在我看来,并非64位NETSH中可用的所有上下文都可以在32位NETSH中使用,因此我在C:\ WINDOWS \ SYSWOW64文件夹中启动了NETSH,然后猜测是什么-“跟踪开始”失败了。当我在C:\ WINDOWS \ SYSTEM32中尝试相同的命令时,它运行良好。
收到此信息后,我启动了一个 32位可执行文件,它触发了NETSH-确实-它从c:\ WINDOWS \ SYSWOW64文件夹中触发-然后显示“ trace启动”失败。当我将可执行文件更改为X64(64位)时,NETSH用尽了C:\ WINDOWS \ SYSTEM32-猜猜是什么-跟踪按预期方式完美启动。
这肯定是我所见过的64位和32位应用程序之间最奇怪的区别之一,但这肯定是答案。您可能会尝试查看您遇到的情况是否有相同的结果。