通过C#中的批处理文件运行exe时出现空异常,但手动单击批处理时不会出现空异常
我们有一个为我们构建的第三方exe。它读取word文档并将其转换为XML,以便我们可以处理它们 我们有一个批处理文件,单击时运行良好。它只是在文档文件夹中的所有文档上循环,并将参数传递到WordExtract.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
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直接涉及传递参数。