2013-03-27 24 views
0

時,我們有一個是爲我們建立了一個第三方的exe。它讀取文檔並將它們轉換爲XML,以便我們處理它們。空異常運行時,在C#中通過批處理文件exe文件,但不能點擊批量手動

我們有點擊時運行正常的批處理文件。它只是遍歷在我們的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

批處理文件是否帶有任何命令行參數? – 2013-03-27 13:17:37

+0

我會帶着S#Schultz講述'c#',但'string.format'語句中的'@'做了什麼? – Magoo 2013-03-27 13:29:06

+0

@PeterWright,'@'表示字符串可以包含\而不必轉義它。 – 2013-03-27 14:39:30

回答

1

,你需要執行的文件是「的CMD.exe」,你要運行的批處理文件是你的論點: -

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

我已經沿着該路線以及相同的空例外。 – 2013-03-27 17:15:15

+0

那麼這是相當奇怪的,你通常會從你的機器的根目錄運行這個批處理文件:你的機器上的驅動器,或者這是在服務器上運行?我會要求第三方公司提供支持,因爲那裏有拋出異常的程序。 – Derek 2013-03-27 20:17:40

+0

是的,我認爲這真的很奇怪...最終它會從我們的網絡服務器運行。現在,我只是試圖讓它在我的本地機器上工作。我確實向第三方發送了電子郵件,看看他們是否有任何想法。這很奇怪,批處理文件在單擊時運行良好,而在C#中運行時不會運行。 – 2013-03-28 11:17:34