的ShellExecuteEx
Win32函數調用有一個標誌SEE_MASK_FLAG_NO_UI
在其SHELLEXECUTEINFO
結構,它應抑制任何錯誤對話框可能因錯誤而啓動應用程序時顯示在系統啓動.NET應用程序時,顯示錯誤。的ShellExecuteEx與SEE_MASK_FLAG_NO_UI而不.NET
MSDN文檔here是相當明確一下:
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,例如?
你是完全正確的。解決此問題的唯一方法是檢測到沒有.NET,並避免完全啓動應用程序。 – 2010-02-02 13:22:57