从Windows应用程序执行命令行

时间:2010-05-11 18:50:01

标签: c# .net command-prompt

我需要从.NET Windows应用程序执行命令行。 我尝试使用此代码,但我收到错误

  

'C:\ Documents'未被识别为   内部或外部命令,可操作   程序或批处理文件。

var command ="\"C:\\Documents and Settings\\Administrator\\My Documents\\test.exe\" \"D:\\abc.pdf\" \"C:\\Documents and Settings\\Administrator\\My Documents\\def.pdf\"";

var processInfo = new ProcessStartInfo("cmd","/c " + command)
{
    UseShellExecute = false,
    RedirectStandardError = true,
    CreateNoWindow = true
};
var p = Process.Start(processInfo);

3 个答案:

答案 0 :(得分:6)

我认为你不需要向cmd炮轰。只需直接调用exe:

var command ="\"C:\\Documents and Settings\\Administrator\\My Documents\\test.exe\" \"D:\\abc.pdf\" \"C:\\Documents and Settings\\Administrator\\My Documents\\def.pdf\"";
var processInfo = new ProcessStartInfo(command)
                      {
                          UseShellExecute = false,
                          RedirectStandardError = true,
                          CreateNoWindow = true
                      };
var p = Process.Start(processInfo);

答案 1 :(得分:6)

尝试使用Process.Start的重载版本并传递第二个参数中的参数。

var command = @"C:\Documents and Settings\Administrator\My Documents\test.exe";
var parameters = @"""D:\abc.pdf"" ""C:\Documents and Settings\Administrator\My Documents\def.pdf""";

var p = Process.Start(command, parameters);

这假设您尝试使用pdf文件作为参数调用test.exe。

答案 2 :(得分:0)

除了你不需要通过cmd.exe开始你的过程(如另一个答案中已经提到的),我认为你需要将命令行参数与名称分开开始的过程;即。尝试类似的东西:

var command   = @"C:\...\test.exe";
var arguments = @"D:\abc.pdf ...";

var processInfo = new ProcessStartInfo(command, arguments)
                  {
                      CreateNoWindow = true,
                      ...  // add other options as needed
                  };

var p = Process.Start(processInfo);

如您所见,可执行文件的名称和命令行参数已移至ProcessStartInfo构造函数的单独参数中。 (你显然需要把正确的琴弦放回去;为了清楚起见,我将它们缩写。)