문제

이 프로그램이 메시지 상자를 올바르게 표시하지만 오류 수준을 설정하지 않는 이유는 무엇입니까?

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"

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top