将命令行参数从C#传递到外部exe
我有一个已经解决的类似问题。但我不明白这个问题是如何解决的。我有一个程序,可以获取参数并定义输入和输出文件。从推荐行运行此命令,一切正常:将命令行参数从C#传递到外部exe,c#,command-line,parameters,C#,Command Line,Parameters,我有一个已经解决的类似问题。但我不明白这个问题是如何解决的。我有一个程序,可以获取参数并定义输入和输出文件。从推荐行运行此命令,一切正常: D:\Tools\siftDemoV4>siftWin32.exe -display < D:\tmp\SrcPgm\image000.pbm > result.pbm D:\Tools\siftDemoV4>siftWin32.exe-displayresult.pbm 但通过System.Diagnostics.Process运行不
D:\Tools\siftDemoV4>siftWin32.exe -display < D:\tmp\SrcPgm\image000.pbm > result.pbm
D:\Tools\siftDemoV4>siftWin32.exe-displayresult.pbm
但通过System.Diagnostics.Process运行不起作用。我得到错误“无效的命令行参数:{1}”,configuration.Source,
配置。目的地),
FileName=configuration.PathToExternalSift,
RedirectStandardError=true,
重定向标准输入=真,
重定向标准输出=真,
UseShellExecute=false,
CreateNoWindow=true,
ErrorDialog=false,
}
};
process.EnableRaisingEvents=true;
process.Exited+=OnProcessExited;
process.OutputDataReceived+=新的DataReceiveDevenHandler(process\u OutputDataReceived);
process.ErrorDataReceived+=新的DataReceivedEventHandler(process\u ErrorDataReceived);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
在调用process.Start()之后,我已经尝试写入process.StandardInput,但在使用调试器时,外部程序有时已经完成(HasExited==true)
有人能解释一下我如何将这个特殊的“”参数传递给程序吗
致以最良好的问候
顺便说一句,我多次检查了路径,它们是正确的。您需要的唯一参数是
-display
其他参数不是程序的参数,应该由您使用重定向标准输入
和重定向标准输出
例如
- 读取文件
D:\tmp\SrcPgm\image000.pbm
- 写入流程的
StandardInput
- 从流程的
中读取StandardOutput
- 写入
result.pbm
如果您已经阅读了另一个线程,为什么不也阅读该线程?提示:这是第一段。上一篇解释了为什么
不起作用。在您的可能重复的Ok之后,我尝试了这个,但现在我得到了另一个错误:错误:输入不是标准的原始PGM文件。但我所做的每件事都是process.StandardInput.Write(File.ReadAllBytes(sourceFile))和Flush()+Close()。我不会更改文件内容的任何内容。如果解决了此问题。通过将文件读入字符串而不是字节[]来解决问题。有人知道为什么吗?多亏了L.B。
var process = new Process()
{
StartInfo =
{
Arguments = string.Format(@"-display < {0} > {1}", configuration.Source,
configuration.Destination),
FileName = configuration.PathToExternalSift,
RedirectStandardError = true,
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
ErrorDialog = false,
}
};
process.EnableRaisingEvents = true;
process.Exited += OnProcessExited;
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();