- 締切済み
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; です。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- aris-wiz
- ベストアンサー率38% (96/252)
>scene.Create(renderer.GetDevice())) ここで出てくるsceneやrendererは何者ですか?? 別プロセスの起動にはあまり関わりなさそうですが。。。 >si.cb = sizeof(si); 良く見たらありましたね; 申し訳ない。
- aris-wiz
- ベストアンサー率38% (96/252)
>上手くいきませんでした。 何がどううまくいかなかったのか教えてください。 >ZeroMemory( &si, sizeof(si) ); STARTUPINFOはウィンドウを表示する時に使われる情報です。 中身を設定されているコードがありませんが、きちんと設定 されていますか?
補足
回答ありがとうございました。 >何がどううまくいかなかったのか教えてください。 上手くいかないのは、呼び出しているプログラム内で、 // シーンの生成 if(FAILED(scene.Create(renderer.GetDevice()))) { return 0; } で引っかかってしまい、リターンされてしまいます。 >ZeroMemory( &si, sizeof(si) ); こちらについてですが、 以下のホームページを参考にしました。 http://www11.plala.or.jp/studyhall/cpp/system.html ほれ以外の方法や追加が必要だったならば、ないかよい方法を教えてください。よろしくお願いします。
お礼
何とか動くようになりました。 またよろしくお願いします。
補足
返答が遅れてすみませんでした。 回答ありがとうございました。 >scene.Create(renderer.GetDevice())) >ここで出てくるsceneやrendererは何者ですか?? >別プロセスの起動にはあまり関わりなさそうですが。。。 実際自分で書いたものでないので、詳しく輪わからないのですが、 この質問に対してですが、この処理は、CGを描写している処理です。 何度やってもここで引っかかってしまいます。 現在の掲載している、exeファイルの呼び出しよりもよいものがあったら、どうか教えてください。