
ちょっとした変換ツールを作ろうと思い、ダイアログベースの
MFCアプリケーションを作成しました。
OKボタンが押された時にCreateProcess()で子プロセスを
起動して、終了したら結果表示して親プロセスも終了する
様にしようと思ったのですが、結果表示までは正常に
実行されるのですが、親プロセスが終了しません。
恐らくCreateProcess()に渡す引数が悪いのだと思うのですが、
どなたかわかる方がいらしたらご教示願います。
void CMscGenSelectorDlg::OnBnClickedOk()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof si );
si.cb = sizeof si;
ZeroMemory( &pi, sizeof pi );
// 子プロセス起動
CreateProcess(
NULL, // モジュール名
_T("mscgen.exe -Tpng hoge.msc"), // コマンドライン
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
FALSE, // ハンドルの継承オプション
0, // 作成のフラグ
NULL, // 新しい環境ブロック
NULL, // カレントディレクトリ名
&si, // スタートアップ情報
&pi); // プロセス情報
// 子プロセス終了待ち
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
// シーケンスチャート表示
ShellExecute( NULL, _T("open"), _T("hoge.png"), NULL, NULL, SW_SHOW );
// 終了
OnOK();
}
No.1ベストアンサー
- 回答日時:
問題の解決として次の点を試してください。
1.子プロセスは起動しているのか?
CreateProcessの戻り値は何ですか
2.子プロセスは終了しているか?
タスクマネージャでプロセスが消えますか
この回答への補足
子プロセス(mscgen.exe)は起動して、それによって生成された
PNG画像もその後のShellExecute()で表示されています。
実際のソースでは、
if( !CreateProcess(...) ) {
エラー処理;
return;
}
としていますので、TRUEが返って来ていると思います。
早速の回答ありがとうございます。
タスクマネージャの件は、会社にしかVCがないため、
現在は確認ができませんので、申し訳ありませんが、
月曜日に補足させて頂きます。
No.2
- 回答日時:
実はボタンを複数回押してしまった。
とか…。OSに応答なしプロセスとして無視されている。とか…。
この回答への補足
結論から言いますと、プロジェクトのプロパティで文字セットを
変更したら親プロセスも終了するようになりました。
当初、プロジェクト生成時のデフォルトのまま「Unicode文字
セットを使用する」にしていたのですが、「マルチバイト文字
セットを使用する」に変更して、関数や関数の引数をそれに
合わせて変更したら無事終了できました。
Unicodeを使う設定の時の子プロセスの起動には何か注意が
必要なのでしょうか?
回答ありがとうございました。
unicode環境でのプロセス呼び出しについては、
もう少し自分で調べて分からなければ別途質問
したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他のEXEが起動しているかの確認
-
常駐するアプリケーションを初...
-
アプリケーションが終了するま...
-
タスクマネージャーのプロセス...
-
実行中のプログラムIDが取得...
-
C++のプログラムをバックグラウ...
-
UNIX関数?(popen)...
-
Apacheの子プロセスが再起動す...
-
シェルで親プロセス終了時に子...
-
forkについて
-
Macターミナルで実行中のプログ...
-
エクセルVBA 大容量CSVファイル...
-
FOM出版の公認テキスト&問題集...
-
vb.netでバッチ処理
-
VB 電卓 メモリー機能
-
ソケット通信 同じポート番号...
-
Linuxでのシリアル通信について...
-
powershell を使いカレントディ...
-
VBA:CSVファイルの読出し手法...
-
.sb3のファイルを.sb2に変換す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タスクマネージャーのプロセス...
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
OSPFでプロセスを分ける意義に...
-
ADOでアクセスのレコードに...
-
非表示になったエクセルは?
-
Process.Startの戻り値を後で取得
-
vb.netでEXCEL起動がうまくでき...
-
C#でのbatファイル実行結果取得
-
プロセスIDの取得方法について
-
Linuxでのスレッド間メッセージ...
-
Visual C++からpingを実行して...
-
SendMessageが失敗するときがある
-
IISがフリーズ
-
スティーブ・ジョブズはプログ...
-
c言語でプロセスIDを調べたい
-
特定ユーザーのプロセス情報を...
-
怪しいプロセス教えてください。
-
セマフォとmutexの違いは?
-
Windowsでのfork方法
おすすめ情報