在C#中通过批处理文件运行exe时出现Null异常,但在手动单击批处理时则不行

时间:2013-03-27 13:01:43

标签: c# batch-file

我们有为我们建立的第三方exe。它读取word文档并将它们转换为XML,以便我们处理它们。

我们有一个批处理文件,点击后运行正常。它只是循环遍历doc文件夹中的所有文档,并将参数传递给WordExtract.exe:

for %%a in (MyPATH\*.doc) do WordExtract.exe -InputFile="%%a" -TempFile0="%%a.html" -OutputFile= "%%a.xml"

当我们尝试在C#代码中调用它时,它为WordExtract.exe提供了一个空引用异常

System.NullReferenceException was unhandled
  Message=Object reference not set to an instance of an object.
  Source=WordExtract
  StackTrace:
       at WordExtract.Converter.word2text(FileInfo file, FileInfo txtfile)
       at WordExtract.Program.Main(String[] args)
  InnerException:

所以它调用批处理文件很好。我只是不确定为什么批处理文件在我手动运行时不会产生错误,但在以编程方式运行时会以某种方式出现空异常。

尝试在命令提示符下手动和编程运行exe时,我也得到了相同的结果。手动完成时工作正常,并以编程方式运行时出现上述错误。

有关于此的任何想法吗?运行批处理文件应该以任何方式产生相同的结果。它根本不需要任何输入,所以我不能以编程方式搞砸了。

以下是运行批处理文件的代码:

Process proc = new Process();
            string targetDir = string.Format(@"C:\BatchTest");//this is where batch.bat is
            proc.StartInfo.WorkingDirectory = targetDir;
            proc.StartInfo.FileName = "batch.bat";
            proc.StartInfo.CreateNoWindow = false;
            proc.Start();
            proc.WaitForExit();

1 个答案:

答案 0 :(得分:1)

您需要执行的文件是“CMD.exe”,您要运行的批处理文件是您的参数: -

System.Diagnostics.Process.Start("cmd", "/c C:\\BatchTest\\batch.bat");