无法从c#执行“cmd”或批处理文件

时间:2013-06-07 21:02:16

标签: c# visual-studio-2010 exception-handling batch-file

我需要从c#运行批处理文件(或cmd)。我的代码很简单:

 Process.Start(@"C:\b.bat");
Process.Start(@"cmd.exe");

我也尝试了Executing Batch File in C#和许多其他网站,但我不认为问题与语法有关。

错误发生在上面的任一行,我用Google搜索但找不到解决我特定问题的方法:

  

“System.ComponentModel.Win32Exception”类型的未处理异常   发生在System.dll中的附加信息:指定的可执行文件不是有效的应用程序   这个OS平台。

奇怪的是这些代码没有问题:

Process.Start(@"IExplore.exe");
Process.Start("notepad");

我正在运行visual studio 2012并为x86编译,但我的操作系统是64位的Windows 7,不确定它是否重要。程序中的其他任何内容运行正常。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

我认为您的问题是您正试图在Process.Start(@"C:\b.bat")中启动一个未知流程。当我这样做时,我使用以下内容。

        string cmd = "/C b.bat";
        var m_command = new System.Diagnostics.Process();
        m_command.StartInfo.FileName = @"cmd.exe";
        m_command.StartInfo.Arguments = cmd;
        m_command.Start();

/ C将在完成后关闭应用程序。所以本质上上面的代码将:

  1. 启动cmd.exe流程
  2. 执行您的参数(在本例中为/C b.bat
  3. 如果您希望让程序在继续之前等待m_command.WaitForExit()完成执行,您还可以添加b.bat

答案 1 :(得分:0)

Process.Start(@"C:\b.bat");应该可行,但将其置于根目录可能会导致问题。尝试将bat文件移动到项目目录,并将绝对路径放到文件中。例如,我刚用Process.Start(@"""C:\dev\ConsoleApplication1\ConsoleApplication1\test.bat""");

取得了成功

答案 2 :(得分:0)

我通过使用此命令运行32位cmd来解决问题:

proc.StartInfo.FileName = @“C:\ windows \ system32 \ cmd.exe”;