2010-05-11 71 views
1

我需要从.NET Windows应用程序执行命令行。 我试图与该代码,但我得到错误从windows应用程序执行命令行

“C:\文件”没有被识别为一个 内部或外部命令,可操作 程序或批处理文件。

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

回答

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

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构造的独立参数。 (你显然需要把适当的字符串放回去;为了清楚起见,我简化了它们。)