【问题标题】:Passing Command-line arguments from C# to a external exe将命令行参数从 C# 传递给外部 exe
【发布时间】:2012-01-23 20:53:18
【问题描述】:

我有一个类似的问题,已经解决了here。但我不知道,问题是如何解决的。我有一个程序可以获取定义输入和输出文件的参数。从 Commend 行运行,一切正常:

D:\Tools\siftDemoV4>siftWin32.exe -display < D:\tmp\SrcPgm\image000.pbm > result.pbm

但是通过 System.Diagnostics.Process 运行,不起作用。我收到错误“无效的命令行参数:

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();

在调用 process.Start() 后,我已经尝试写入 process.StandardInput,但是在使用调试器时,外部程序有时已经完成(HasExited==true)。

谁能解释我如何将这个特殊的““参数传递给程序?

最好的问候!

顺便说一下,我多次检查路径,它们是正确的。

【问题讨论】:

标签: c# command-line parameters


【解决方案1】:

您需要的唯一参数是-display 其他不是程序的参数,应由您使用RedirectStandardInputRedirectStandardOutput处理

例如

  • 读取文件D:\tmp\SrcPgm\image000.pbm
  • 写信给您的进程的StandardInput
  • 从您的进程的StandardOutput 读取
  • 写信给result.pbm

Using command redirection operators

【讨论】:

  • 好的,我试过了,但现在我得到了一个错误:错误:输入不是标准的原始 PGM 文件。但我所做的一切都是 process.StandardInput.Write(File.ReadAllBytes(sourceFile)) 和 Flush()+Close()。我没有更改文件内容的任何内容。
  • 如果解决了这个link的问题。通过将文件读入字符串而不是字节 [] 来解决问题。有人知道为什么吗?感谢 L.B.
猜你喜欢
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 2020-02-18
  • 2015-06-09
  • 2017-10-22
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多