「ある操作を行ったとき exe が 2 つ起動する」と報告があった.
言い訳になるが,通常この動作は年に 2 回程度しか通らないもの.また,他の操作により通らないこともある.
その条件になる様に環境を設定して試すと,確かに…
その部分のコードは,何年も変更はしていない.
いろいろと動作を確認していると,VC 10 以前では問題ないが,11 以降で 2 つ起動することがわかった.
その動作の部分のみを抜き出して動作を試した.
int CT_DlG_1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: ここに特定な作成コードを追加してください。
{
HWND HWnd = NULL ;
{
CWnd* mainWnd = AfxGetMainWnd() ;
if (mainWnd != NULL) {
HWnd = mainWnd->GetSafeHwnd() ;
}
}
HINSTANCE hInst = ::ShellExecute(HWnd,NULL,_T("NotePad.exe"),NULL,NULL,SW_SHOWNORMAL) ;
return -1 ;
}
return 0;
}
MFC の動作が変わったのか,CXxxxDlg::OnCreate が 2 回呼ばれるようになったみたい.
https://itl.mish.work/i_Tools/Doc/blog/vc/TDlg0614.zip
2 回目に呼ばれた時は,何もしないで return -1 とする様に変更予定.