SEE_MASK_FLAG_NO_UI表示エラーとShellExecuteExを.NETせずに、システム上の.NETアプリを起動します
-
22-09-2019 - |
質問
はShellExecuteEx
Win32関数呼び出しは、アプリケーションの起動時にエラーが発生したため、表示することができる任意のエラーダイアログを抑制する必要があり、そのSEE_MASK_FLAG_NO_UI
構造のフラグSHELLEXECUTEINFO
を有している。
MSDNのドキュメントここのはかなりありますそれについての明示的なます:
SEE_MASK_FLAG_NO_UI
0x00000400. Do not display an error message box if an error occurs.
私の場合、私は、.NETがインストールされていないWindows XPシステム上の.NET実行可能ファイルを起動しています。
:私は体系ダイアログウィンドウでWindowsが表示する、次のメッセージが表示されますXxx.exe - Application Error
The application failed to initialize properly (0xc0000135).
Click on OK to terminate the application.
[ OK ]
私は、ユーザーがこのメッセージに対処する必要がありますする必要はありません。私はむしろShellExecuteEx
からのエラーコードを取り戻すと私のプログラムで優雅にそれを処理することができると思います。ここで私は外部の実行ファイルを起動するために使用していますコードスニペットがあります:
#include <windows.h>
int wmain(int argc, wchar_t* argv[])
{
SHELLEXECUTEINFO info;
memset(&info, 0, sizeof(SHELLEXECUTEINFO));
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_FLAG_NO_UI;
info.lpVerb = L"open";
info.lpFile = L"Xxx.exe";
info.nShow = SW_SHOW;
return ShellExecuteEx (&info);
}
.NETがシステムに存在しない場合は、エラーメッセージを抑制する公式の方法はありますか?それとも私は(それは、.NETアプリやネイティブアプリであれば、私は事前に知っていない)アプリケーションを実行する前に、この特定の条件のために自分自身を確認する必要がありません。そして、何もし私が始めていますアプリは、例えば、いくつかのDLLが見つからない?
解決
フラグは、エラーメッセージを表示しないようにシェルに指示します。それは始まったプロセスのUIには影響を与えません。 .NETはShellExecuteExを()は、それの仕事をしたし、エラーを見ていないので、本当に始めた.exeファイル。それは後で爆撃し、それはあなたが簡単に修正できるものではありませんについては、ユーザーのノウハウを聞かせすることを決めた。
他のヒント
なぜあなたは使用しないのCreateProcess >機能