Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C#中的批处理文件运行exe时出现空异常,但手动单击批处理时不会出现空异常_C#_Batch File - Fatal编程技术网

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

通过C#中的批处理文件运行exe时出现空异常,但手动单击批处理时不会出现空异常,c#,batch-file,C#,Batch File,我们有一个为我们构建的第三方exe。它读取word文档并将其转换为XML,以便我们可以处理它们 我们有一个批处理文件,单击时运行良好。它只是在文档文件夹中的所有文档上循环,并将参数传递到WordExtract.exe: for %%a in (MyPATH\*.doc) do WordExtract.exe -InputFile="%%a" -TempFile0="%%a.html" -OutputFile= "%%a.xml" 然而,当我们试图在C#代码中调用它时,它为WordExtract

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

我们有一个批处理文件,单击时运行良好。它只是在文档文件夹中的所有文档上循环,并将参数传递到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:
所以它称批处理文件为罚款。我只是不知道为什么手动运行batchfile时不会产生错误,但以编程方式运行时会出现null异常

我也有同样的结果时,试图只是在命令提示符运行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();

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

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

批处理文件是否接受任何命令行参数?我将接受Schultz中士关于
c#
,但是
@
string.format
语句中做了什么?@PeterWright,
@
意味着字符串可以包含\而不必转义。@Ryan Frame,没有参数。批处理文件实际上只需要运行(当手动单击时)>我也使用了相同的null异常。这很奇怪,您通常是从计算机上的c:驱动器根目录运行此批处理文件,还是在服务器上运行此批处理文件?我会请求第三方公司的支持,因为它的程序正在抛出异常。是的,我觉得这也很奇怪。。。最终它将从我们的Web服务器上运行。现在,我只是想让它在我的本地机器上工作。我确实给第三方发了电子邮件,看看他们是否有什么想法。这真的很奇怪,批处理文件在单击时运行良好,而在C#中运行时运行不正常。我唯一能想到的是mate,当您在C驱动器上运行该文件时,当它在文件夹中查找*.doc对象时,它找不到任何对象,因此引发空异常??您可以尝试完全使用c#,而不是使用批处理文件mind。使用WordExtract、Exe作为您的进程,并同时传入参数。您可以为文件夹中的每个文件打开一个进程吗?试试那个?也试试那个。我刚刚在这里发布了关于批处理文件的内容,因为我认为理解并排除编程错误是最简单的。Ie批处理文件不接受任何参数,因为运行exe直接涉及传递参数。