みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

exeファイルの起動について教えてください

はじめまして。
現在c言語を勉強しているのですが、プログラム内で別のプログラムのexeファイルを呼び出し起動させたいのですが、サイトをいろいろ回ったのですが上手くいきませんでした。
環境は、Microsoft Visual C++ 2005 Express Edition

現在の呼び出し方法は、



caseIDC_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;
です。
よろしくお願いします。

投稿日時 - 2007-12-03 11:05:03

QNo.3567022

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>scene.Create(renderer.GetDevice()))
ここで出てくるsceneやrendererは何者ですか??
別プロセスの起動にはあまり関わりなさそうですが。。。

>si.cb = sizeof(si);
良く見たらありましたね;
申し訳ない。

投稿日時 - 2007-12-03 16:03:52

補足

返答が遅れてすみませんでした。
回答ありがとうございました。
>scene.Create(renderer.GetDevice()))
>ここで出てくるsceneやrendererは何者ですか??
>別プロセスの起動にはあまり関わりなさそうですが。。。
実際自分で書いたものでないので、詳しく輪わからないのですが、
この質問に対してですが、この処理は、CGを描写している処理です。
何度やってもここで引っかかってしまいます。
現在の掲載している、exeファイルの呼び出しよりもよいものがあったら、どうか教えてください。

投稿日時 - 2007-12-14 10:10:50

お礼

何とか動くようになりました。
またよろしくお願いします。

投稿日時 - 2007-12-17 10:53:01

ANo.1

>上手くいきませんでした。
何がどううまくいかなかったのか教えてください。

>ZeroMemory( &si, sizeof(si) );
STARTUPINFOはウィンドウを表示する時に使われる情報です。
中身を設定されているコードがありませんが、きちんと設定
されていますか?

投稿日時 - 2007-12-03 11:35:51

補足

回答ありがとうございました。

>何がどううまくいかなかったのか教えてください。
上手くいかないのは、呼び出しているプログラム内で、
// シーンの生成
if(FAILED(scene.Create(renderer.GetDevice()))) {

return 0;
}
で引っかかってしまい、リターンされてしまいます。

>ZeroMemory( &si, sizeof(si) );
こちらについてですが、
以下のホームページを参考にしました。
http://www11.plala.or.jp/studyhall/cpp/system.html
ほれ以外の方法や追加が必要だったならば、ないかよい方法を教えてください。よろしくお願いします。

投稿日時 - 2007-12-03 13:49:12

あなたにオススメの質問