我有一个奇怪的错误,我不知道是什么导致它我有一个非常简单的控制台应用程序与try-catch
static int Main()
{
int returncode = 0;
try
{
//some processing
}
catch
{
returncode = 1;
}
return returncode;
}
和批处理文件
echo off
theprogram.exe
if errorlevel 1 goto Error
if errorlevel 0 goto Sucesss
echo I dont know what happened
echo %errorlevel%
goto :EOF
:Error
echo There was an error
goto :EOF
:Sucess
echo Completed Succesfully
goto :EOF
当我在成功条件下执行批处理文件时,它运行良好。但是当我在失败条件下执行它时,即使返回值为1,我有时会得到255,有时候会得到-532462766 ......
我迷路了为什么......(我不习惯使用批处理文件)
编辑:我做了更多的实验。该代码使用DLL。如果该DLL不存在,则会发生上述情况。我猜测当DLL不存在时,它将抛出一个异常,它将被catch捕获,因此返回代码为1,但似乎不会发生
甚至更奇怪的是,如果我故意抛出“DLLNotFoundException”,它运行良好
try
{
throw new DllNotFoundException();
}
catch
{
returncode = 1;
}
但是当实际的DLL不存在时却没有
这是你的(.bat)代码稍加修改(code.bat):
@echo off
call inner.bat %~1
echo ERRORLEVEL: %ERRORLEVEL%
if "%ERRORLEVEL%" equ "0" (
goto :success
)
:error
echo There was an error
goto :eof
:success
echo Completed Succesfully
goto :eof
inner.bat:
if "%~1" neq "" (
echo Inner script: exiting with %~1
exit /b %~1
) else (
echo Inner script: exiting with 0
exit /b 0
)
笔记:
return
语句),如果没有提供,则返回0。检查[SS64]: Command Line arguments (Parameters)有关参数的更多详细信息,以及[SS64]: IFif ERRORLEVEL value
做if %ERRORLEVEL equ 0
(虽然有些人可能认为这是不正确的,并且在某些情况下它会产生意想不到的结果)。更多细节,再次在[SS64]: %Errorlevel%
这样,0表示成功,其他一切(正值或负值)表示错误
:error
标签(仅标签行,而不是它后面的2行)不再需要,但我把它留在那里
还做了一些代码和输出格式输出:
E:\Work\Dev\StackOverflow\q048860316>code.bat -23456 Inner script: exiting with -23456 ERRORLEVEL: -23456 There was an error E:\Work\Dev\StackOverflow\q048860316>code.bat Inner script: exiting with 0 ERRORLEVEL: 0 Completed Succesfully E:\Work\Dev\StackOverflow\q048860316>code.bat 12 Inner script: exiting with 12 ERRORLEVEL: 12 There was an error E:\Work\Dev\StackOverflow\q048860316>code.bat 0 Inner script: exiting with 0 ERRORLEVEL: 0 Completed Succesfully