0

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

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

我也尝试过在 C# 和许多其他站点中执行批处理文件,但我认为问题与语法无关。

上面的任何一行都发生了错误,我已经用谷歌搜索了但没有找到解决我的特定问题的方法:

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

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

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

我正在运行 Visual Studio 2012 并为 x86 编译,但我的操作系统是 Windows 7 64 位,不确定是否重要。程序中的其他所有内容都运行良好。

任何帮助将不胜感激!

4

3 回答 3

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在继续之前等待完成执行,您也可以添加。
于 2013-06-07T21:11:17.977 回答
0

Process.Start(@"C:\b.bat");应该可以工作,但是将其放入根目录可能会导致问题。尝试将 bat 文件移动到您的项目目录,并将文件的绝对路径放入。例如,我刚刚成功Process.Start(@"""C:\dev\ConsoleApplication1\ConsoleApplication1\test.bat""");

于 2013-06-08T03:16:50.857 回答
0

我通过使用以下命令运行 32 位 cmd 解决了这个问题:

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

于 2013-06-12T21:04:34.087 回答