2017-08-09 13 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

可能な複製を使用することができます

代わり

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

の開始を使用していない[どのように私は、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 plication-in-net) – mjwills

+0

両方とも私の質問に答えていない、私はバッチファイルから.NETプログラムを呼び出そうとしている。 – user2726975

答えて

3

startを使用すると、プログラムを実行するための新しいシェルが開始されます。

Official documentation

指定したプログラムまたはコマンドを実行するために、別のコマンドプロンプトウィンドウを起動します。

それはあなたがエラーコードが戻って取得することはできません別のコマンドプロンプトですので。だから、簡単な解決策は、あなただけの

"C:\CSharpProject\GetData\GetData\bin\Debug\GetData.exe" 
関連する問題