好吧,我有一個名爲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應用程序有一些我不知道的問題嗎?
您的'WC_Error_Resolution.exe'應用程序是32位還是64位控制檯應用程序?爲什麼在第二批中使用'/ B'? 'main()'中的'return 0;'(或1或2)不會退出您的控制檯應用程序?在Visual Studio中以調試模式運行應用程序,並檢查它是如何真正退出的。 – Mofi 2014-10-01 21:29:12
項目的構建屬性將目標平臺指定爲「任何CPU」。我應該改爲x86嗎?我使用/ B是因爲對exe的調用是一個更大的腳本的一部分,所以我不想在執行過程中出現第二個窗口。應用程序正常運行,並且在沒有任何更改時退出代碼爲0,當特定文件被更改時爲1,錯誤時爲2。在VS中運行良好。當我像第一個例子那樣編寫腳本時,第二個echo將不會被執行,但是如果在腳本返回後在命令行輸入'ECHO ERRORLEVEL =%ERRORLEVEL%',我會得到正確的退出代碼。 – Josh 2014-10-02 12:50:15
請參閱[Visual Studio「任何CPU」目標是什麼意思?](http://stackoverflow.com/questions/516730/)使用x86配置顯式構建您的控制檯應用程序,並測試是否有所作爲。 – Mofi 2014-10-02 14:02:13