Dlaczego ten program poprawnie wyświetla okno komunikatu, ale nie ustawia poziomu błędu?dlaczego winmain nie ustawił poziomu błędu?
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;
}
Skompilowałem powyższy kod do nazwy pliku wykonywalnego o nazwie a.exe. I zrobił to w wierszu polecenia:
c:\> a.exe
(message box is displayed, I press ok)
c:\> echo %ERRORLEVEL%
0
uzyskać takie same wyniki, jeśli mogę użyć exit(90);
tuż przed powrotem. Nadal jest napisane: 0
.
Próbowałem również uruchomić program przez CreateProcess
i uzyskać wynik z GetExitCodeProcess
, ale również zwraca mi 0
. Sprawdziłem, czy wszystko zostało poprawnie uruchomione.
Pierwotnie zobaczyłem ten problem w bardziej złożonym programie, więc zrobiłem ten prosty program, aby zweryfikować problem. Wyniki są takie same, oba programy, które mają WinMain
zawsze zwracają 0
.
Próbowałem opcji kompilacji x64, x86 oraz unicode i MBCS. Wszystkie dają 0
jako poziom błędu/kod stanu.
przetestowany z winegcc i to „
ERRORLEVEL
” zwraca 90 (testowane za pomocą $?) w moim systemie. może jakiś problem z powłoką? –Używam MSVC++ 2005 –
Nie sądzę, że jest to problem powłoki, ponieważ również rozpocząłem proces z innej aplikacji i użyłem CreateProcess/WaitForSingleObject/GetExitCodeProcess –