Multithreading Winform netsh进程无法接受多个参数
这是我第一次使用带有多个参数的ProcessStartInfo,我真是束手无策,想让代码正常工作。根据是否在参数字符串中使用转义或如何使用转义,我会不断收到错误或以下错误的某些版本。Multithreading Winform netsh进程无法接受多个参数,multithreading,winforms,user-interface,process,worker,Multithreading,Winforms,User Interface,Process,Worker,这是我第一次使用带有多个参数的ProcessStartInfo,我真是束手无策,想让代码正常工作。根据是否在参数字符串中使用转义或如何使用转义,我会不断收到错误或以下错误的某些版本。 我尝试了多个stackoverflow代码片段,并从MSDN中尽可能地阅读了所有内容。 MSDN表示应该转义空白。当我这样做时,我收到一个错误。。。如果我没有逃避参数,我也会收到一个错误。以下错误显示在textBox1中。Text [1] :未找到以下命令:“跟踪开始捕获=是” report=no persiste
我尝试了多个stackoverflow代码片段,并从MSDN中尽可能地阅读了所有内容。
MSDN表示应该转义空白。当我这样做时,我收到一个错误。。。如果我没有逃避参数,我也会收到一个错误。以下错误显示在textBox1中。Text [1] :未找到以下命令:“跟踪开始捕获=是” report=no persistent=no traceFile=C:\temp\mynettrace.etl.“
但是,当我从WinForms按钮启动它时,它不喜欢我配置参数的方式。
我查阅了显示多个参数的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();
}
}
}
我看到了这个问题,非常好奇为什么我们会看到不同的反应——一个是它不起作用的反应,另一个是表明它起作用的反应。也许我是一个受虐狂,但我深陷其中,找到了答案 NETSH是一个基于脚本的shell环境,可在各种上下文中运行。上下文由建立每个上下文时加载的依赖DLL提供。我突然想到,并非所有64位NETSH中可用的上下文都在32位NETSH中可用,因此我启动了C:\WINDOWS\SYSWOW64文件夹中的NETSH,猜猜看,“跟踪启动”失败了。当我在C:\WINDOWS\SYSTEM32中尝试相同的命令时,它工作得非常好 有了这些信息,我启动了一个启动NETSH的32位可执行文件,果然,它是从c:\WINDOWS\SYSWOW64文件夹启动的,“跟踪启动”失败了。当我将可执行文件更改为X64(64位)时,NETSH在C:\WINDOWS\SYSTEM32中运行-猜猜看-跟踪启动得很好,正如预期的那样
这肯定是我见过的64位和32位应用程序之间最奇怪的区别之一,但这似乎就是答案。你可以试着看看在你的情况下你是否也经历过同样的结果 我以为你已经解决了。这个代码没有问题。它运行正常。您应该确认
C:\\temp\\mynettrace.etl
文件不存在,否则netsh
将拒绝覆盖它。另外,在启动另一个具有相同文件名的跟踪之前,请停止跟踪:netsh->trace->stop
(并删除/移动生成的文件)。否则,netsh
将拒绝运行。