Winmain이 오류 범위를 설정하지 않는 이유는 무엇입니까?
-
09-09-2019 - |
문제
이 프로그램이 메시지 상자를 올바르게 표시하지만 오류 수준을 설정하지 않는 이유는 무엇입니까?
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MessageBox(NULL, _T("This should return 90 no?"), _T("OK"), MB_OK);
return 90;
}
위의 코드를 A.Exe라는 실행 파일 이름으로 컴파일했습니다. I는 명령 프롬프트 에서이 작업을 수행했습니다.
c:\> a.exe
(message box is displayed, I press ok)
c:\> echo %ERRORLEVEL%
0
사용하면 동일한 결과를 얻습니다 exit(90);
돌아 오기 직전. 여전히 말합니다 0
.
또한 프로그램을 시작하려고했습니다 CreateProcess
그리고 결과를 얻으십시오 GetExitCodeProcess
그러나 그것은 또한 돌아옵니다 0
나에게. 모든 것이 올바르게 시작되었는지 확인하기 위해 오류를 확인했습니다.
나는 원래이 문제를보다 복잡한 프로그램에서 보았 으므로이 간단한 프로그램을 만들기 위해이 간단한 프로그램을 만들었습니다. 결과는 모두 동일합니다 WinMain
항상 돌아옵니다 0
.
x64, x86 및 유니 코드 및 MBCS 컴파일 옵션을 모두 시도했습니다. 모두 주 0
오류 수준/상태 코드로.
해결책
프로그램이 콘솔 앱이 아닌 Windows 앱인 경우 명령 인터프리터는 완료되기까지 기다리지 않습니다 (확인을 누르기 전에 명령 창을 살펴보면 다음 명령이 준비되어 있음을 알 수 있습니다. ).
이 경우 콘솔 하위 시스템 앱으로 응용 프로그램을 구축하면 문제가 해결됩니다. Windows 앱으로 실행 해야하는 경우 명령이 완료되고 그것이 작동하는지 기다릴 수 있습니다 (이 작업을 시도하지는 않았지만 좋은 접근 방식처럼 보입니다).
start /wait a.exe
echo %ERRORLEVEL%
다른 팁
을 위한 %ERRORLEVEL%
일을하려면 명령 확장을 활성화해야합니다 (하나님이 언제 알기 때문에 기본값이라고 생각합니다).
시도해보십시오 :
echo %CMDEXTVERSION%
extentions가 활성화되어 있는지 확인합니다. 나는 얻다 '2
'그들이있을 때 출력 "%CMDEXTVERSION%
"그들이 꺼져있을 때.
구식 스타일을 사용하여 오류 레벨을 테스트 할 수도 있습니다.
if errorlevel 1 echo errorlevel is 1 or more...
확장에 관계없이 또는 누군가가 이름으로 환경 변수를 설정 한 경우에도 작동해야합니다. "ERRORLEVEL
"