2017-08-09 169 views
0

我有一個調用C#程序的批處理文件。這個C#程序調用SQL Server數據庫。 有時它無法連接到數據庫,並且異常處理程序打印堆棧跟蹤並退出c#程序。我想嘗試運行這個程序最多5次。 如果成功(5次嘗試之前),則轉到下一步(CheckStatus),然後出錯並退出。調用C#程序後的批處理文件錯誤處理

當我運行這個時,即使C#程序有錯誤,它也會將%ERRORLEVEL%打印爲零。

@ECHO OFF 

SET Header=----------------------------------------------------- 
SET Logfile=C:\LOG\log.txt 
set %ERRORLEVEL% = 0 

echo %header% 
ECHO Running the batch file >> %Logfile% 

if '%1' == '' goto usage 
if '%2' == '' goto usage 
if '%1' == '/?' goto usage 
if '%1' == '-?' goto usage 
if '%1' == '?' goto usage 
if '%1' == '/help' goto usage 


SET SQLServer=dbsql\production 
SET SQLUser=user1 
SET SQLPass=pwd1 
SET SQLCommandMaster=osql -S%SQLServer% -n -U%SQLUser% -P%SQLPass% -b -i 


GOTO %1% 
:Start 
Set count=0 

:RunCSharpProgram 
set /a count+=1 
ECHO starting RunCSharpProgram count >> %Logfile% 
timeout /t 10 
SET RunningStep="RunCSharpProgram" 
start "" "C:\CSharpProject\GetData\GetData\bin\Debug\GetData.exe" 
ECHO %ERRORLEVEL% >> %Logfile% 
IF %ERRORLEVEL% ==1 and count LEQ 5 (GOTO RunCSharpProgram) 
IF %ERRORLEVEL% ==1 and count EQ 5 (GOTO error) 
IF %ERRORLEVEL% ==0 (GOTO CheckStatus) 

:CheckStatus 
ECHO Check Status of tables >> %Logfile% 
REM %SQLCOMMANDMASTER% /Q "EXEC TestDB.dbo.CheckStatus" 
goto end 

:usage 
echo Usage: %0 'start step' 'end step' 
goto end 

:error 
REM --------------------------------------------------------------------- 
ECHO ERROR RUNNING BatchFileTest.BAT >> %Logfile% 


:end 
echo %header% >> %Logfile% 
echo END >> %Logfile% 

不確定這個批處理文件有什麼問題。 謝謝 MR

+1

的可能的複製[我如何從一個Windows命令行應用程序退出代碼? ](https://stackoverflow.com/questions/334879/how-do-i-get-the-application-exit-code-from-a-windows-command-line) – Gusman

+1

可能重複[如何指定在.NET中退出控制檯應用程序的代碼?](https://stackoverflow.com/questions/155610/how-do-i-specify-the-exit-code-of-a-console-ap網絡中的摺疊) – mjwills

+0

這兩個都不回答我的問題,我試圖從批處理文件中調用.NET程序 – user2726975

回答

3

當你使用start時,它會啓動一個新的shell來運行你的程序。

Official documentation

啓動另一個命令提示窗口來運行指定程序或命令。

由於它是一個獨立的命令提示符下,你會找回錯誤代碼。所以,簡單的解決方案不使用啓動

代替

start "" "C:\CSharpProject\GetData\GetData\bin\Debug\GetData.exe" 

你可以使用

"C:\CSharpProject\GetData\GetData\bin\Debug\GetData.exe"