なぜエラーレベルを設定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と呼ばれる実行可能に上記のコードをコンパイル。私は、コマンドプロンプトでこれをやった。
c:\> a.exe
(message box is displayed, I press ok)
c:\> echo %ERRORLEVEL%
0
私は右のリターンの前にexit(90);
を使用する場合は、私は同じ結果を得ます。それはまだ0
を言います。
私はまたCreateProcess
経由でプログラムを起動し、GetExitCodeProcess
で結果を得ることを試みたが、それはまた私に0
を返します。私はそれがすべて正常に開始されたことを確認するために、エラーチェックをしました。
私はもともとので、私は問題を検証するために、この簡単なプログラムを作った、より複雑なプログラムでこの問題を見ました。結果は同じで、WinMain
ている両方のプログラムは、常に0
を返します。
私は、x64、x86とUnicodeとオプションをコンパイルMBCSの両方を試してみました。すべては、エラーレベル/ステータスコードとして0
を与えます。
解決
、それが完了するのをコマンド・インタプリタは、[OK]を押す前に、コマンドウィンドウを見てみましょう(待機しないと、あなたはそれがために準備ができていることがわかります次のコマンド)。
このような場合は、、コンソール・サブシステムアプリとして、あなたのアプリケーションを構築することで問題が解決するだろう。あなたは、Windowsのアプリとして実行する必要がある場合、あなたは(私はこれを試していないが、それは良いアプローチのように思える)を完了し、それが動作するかどうかを確認するためのコマンドを待つしようとする可能性があります:
start /wait a.exe
echo %ERRORLEVEL%
他のヒント
%ERRORLEVEL%
あなたは(私は神が知っているので、デフォルトだと思う)が有効になっコマンド拡張機能を持っている必要が機能するには。
やってみます:
echo %CMDEXTVERSION%
extentionsが有効になっているかどうかを確認するには。彼らはオフになっているとき、私は、彼らがオンになっている「2
」出力と「%CMDEXTVERSION%
」を取得しています。
また、古いスタイルを使用してエラーレベルをテストすることができます:
if errorlevel 1 echo errorlevel is 1 or more...
これは、拡張子に関係なく動作するはずですか、誰かが名前「ERRORLEVEL
」と的環境変数を設定している場合