2014-10-01 64 views
2

好吧,我有一個名爲WC_Error_Resolution的程序,它是用C#(.NET 4.0的C#控制檯應用程序)編寫的。此程序根據運行程序時所做的操作返回0,1或2。如果我從cmd.exe調用它,一切工作正常。但是,這裏是我感到困惑的地方。我有一個測試批處理腳本(真正的一個大得多)調用它像:批處理腳本在調用exe後錯誤地退出

ECHO Start 
    WC_Error_Resolution.exe file1.xml file2.xml inifile.ini log1.log log2.log 
    ECHO ERRORLEVEL=%ERRORLEVEL% 

的這裏的問題是,第二回聲永遠不會被執行。第二個腳本進入程序,它調用它並退出批處理腳本。然後我決定嘗試:

ECHO Start 
    START /B /WAIT "" WC_Error_Resolution.exe file1.xml file2.xml inifile.ini log1.log log2.log 
    ECHO ERRORLEVEL=%ERRORLEVEL% 

這一次,它按預期工作。我創建了大量批處理腳本,它們像第一個示例一樣調用.exe文件,並且從未遇到過這樣的問題。什麼可能導致腳本在WC_Error_Resolution.exe程序返回後停止執行?

編輯
----------------------------------------- ------------
所以現在這是顯示與我的另一個程序。這兩個方案都參考System.Xml.Linq。這些程序可以在Windows 7,Windows 8,& Windows Server 2012 R2上編寫腳本。這些程序無法在Windows Server 2008 R2上執行,並且不顯示任何錯誤。腳本根本不會執行程序調用下的程序或命令。請注意,這是一個在啓用了WoW64的64位環境中運行的32位程序。在Windows Server 2008 R2上運行的.NET應用程序有一些我不知道的問題嗎?

+0

您的'WC_Error_Resolution.exe'應用程序是32位還是64位控制檯應用程序?爲什麼在第二批中使用'/ B'? 'main()'中的'return 0;'(或1或2)不會退出您的控制檯應用程序?在Visual Studio中以調試模式運行應用程序,並檢查它是如何真正退出的。 – Mofi 2014-10-01 21:29:12

+0

項目的構建屬性將目標平臺指定爲「任何CPU」。我應該改爲x86嗎?我使用/ B是因爲對exe的調用是一個更大的腳本的一部分,所以我不想在執行過程中出現第二個窗口。應用程序正常運行,並且在沒有任何更改時退出代碼爲0,當特定文件被更改時爲1,錯誤時爲2。在VS中運行良好。當我像第一個例子那樣編寫腳本時,第二個echo將不會被執行,但是如果在腳本返回後在命令行輸入'ECHO ERRORLEVEL =%ERRORLEVEL%',我會得到正確的退出代碼。 – Josh 2014-10-02 12:50:15

+0

請參閱[Visual Studio「任何CPU」目標是什麼意思?](http://stackoverflow.com/questions/516730/)使用x86配置顯式構建您的控制檯應用程序,並測試是否有所作爲。 – Mofi 2014-10-02 14:02:13

回答

0

這回答(通過使用C++示例的)中的答案的問題:

How do I get the application exit code from a Windows command line?

如果程序從控制檯分離然後批處理文件繼續在程序運行和START /B /WAIT正確的解決方法是獲取errorlevel。如果你不明白爲什麼C#程序從控制檯分離出來,你可能想要問一個基於C#程序摘錄的另一個問題。

+0

因爲我們已經改變了解決此問題的流程,所以這不再是個問題。但是,我會說,鏈接的答案雖然有用,但不一定適用,因爲被調用的程序是控制檯程序。這是除非同樣適用於C#控制檯應用程序。 – Josh 2015-01-22 20:59:48

+0

是的:控制檯應用程序可以分離控制檯,並可能使用窗口,這可能是您的應用程序的情況,這就是我製作筆記的原因。 – 2015-01-22 22:00:52

+0

如果是這樣的話,你認爲這個問題會出現在機器上嗎?它只發生在我的同事的機器上。 – Josh 2015-02-05 17:55:56