exeファイルの起動について教えてください
はじめまして。
現在c言語を勉強しているのですが、プログラム内で別のプログラムのexeファイルを呼び出し起動させたいのですが、サイトをいろいろ回ったのですが上手くいきませんでした。
環境は、Microsoft Visual C++ 2005 Express Edition
現在の呼び出し方法は、
case IDC_AI:
/* 表示の次へボタン有効化 */
// SendMessage( hwnd, WM_SETREDRAW, TRUE, 0);
/* 表示 */
// ShowWindow( IAhwnd, SW_SHOW);
// CGMain(IAhwnd, message, wParam, IParam, nCmdShow2);
// ShellExecute(hwnd, "open", "C:\\Documents and Settings\\c319-1037\\デスクトップ\\卒業研究\\プログラム\\11-12\\SQL組と合わせるよう\\Debug\\D3DFWSample2005.exe", NULL, NULL, SW_SHOW);
path=(char*)calloc(MAX_PATH+1,sizeof(char));
if(0!=GetModuleFileName( NULL, buf, MAX_PATH )){// 実行ファイルの完全パスを取得
char drive[MAX_PATH+1]
,dir [MAX_PATH+1]
,fname[MAX_PATH+1]
,ext [MAX_PATH+1];
_splitpath(buf,drive,dir,fname,ext);//パス名を構成要素に分解します
// file = '"';
// file += "\\";
// file += '"';
file = drive;
file += dir;
file += "SQL組と合わせるよう\\Debug\\D3DFWSample2005.exe";
// file += '"';
// file += '"';
MessageBox( hwnd, file.c_str(), "完全パス", MB_OK);
// MessageBox( hwnd, drive, "ドライブ", MB_OK);
// MessageBox( hwnd, dir, "ディレクトリ パス", MB_OK);
// MessageBox( hwnd, fname, "ベース ファイル名 (拡張子なし)", MB_OK);
}
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
MessageBox( hwnd, "秀丸を起動します", "完全パス", MB_OK);
// 秀丸を起動する
if( !CreateProcess( NULL, // No module name (use command line).
(LPSTR)file.c_str(), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
MessageBox( hwnd, "CreateProcess failed.", "実行エラー", MB_OK);
iRtn = -1;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
MessageBox( hwnd, "秀丸を終了しました", "完全パス", MB_OK);
return iRtn;
です。
よろしくお願いします。
お礼
早速の回答ありがとうございます。 タスクマネージャの件は、会社にしかVCがないため、 現在は確認ができませんので、申し訳ありませんが、 月曜日に補足させて頂きます。
補足
子プロセス(mscgen.exe)は起動して、それによって生成された PNG画像もその後のShellExecute()で表示されています。 実際のソースでは、 if( !CreateProcess(...) ) { エラー処理; return; } としていますので、TRUEが返って来ていると思います。