
ちょっとした変換ツールを作ろうと思い、ダイアログベースの
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Excel(エクセル) Excelでnullになるような式のセルをマクロで空白行と認識させるにはどうすればいいですか? 3 2023/03/13 13:42
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- その他(コンピューター・テクノロジー) Texについてです。 jpgファイルを貼り付けても表示されないのですが、どうしたら表示できますか? 1 2022/06/30 23:42
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でのbatファイル実行結果取得
-
バックグラウンドのプロセスの...
-
ADOでアクセスのレコードに...
-
CreateObjectで作成したExcelの...
-
プロセスIDの取得方法について
-
OSPFでプロセスを分ける意義に...
-
タスクマネージャの「プロセス...
-
共有メモリの同時アクセスにつ...
-
起動中の他のプログラム(orプ...
-
怪しいプロセス教えてください。
-
c言語でプロセスIDを調べたい
-
外部プロセスを終了したい!!
-
誤ってプロセスの終了をしてし...
-
VC++6.0 「プロセスへ...
-
Linuxのchdir(カレントディレク...
-
実行中のプログラムIDが取得...
-
sleep関数の精度について
-
自ウィンドウがアクティブなの...
-
子プロセスの状態を親プロセス...
-
VB6.0 SHELLで起動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
VB6.0 SHELLで起動...
-
プロセスIDの取得方法について
-
C#でのbatファイル実行結果取得
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
vb.netでEXCEL起動がうまくでき...
-
SendMessageが失敗するときがある
-
ADOでアクセスのレコードに...
-
非表示になったエクセルは?
-
explorer.exeが異様にメモリを食う
-
怪しいプロセス教えてください。
-
Process.Startの戻り値を後で取得
-
プロセスIDからウィンドウハ...
-
Linuxでのスレッド間メッセージ...
-
警告『 別のプロセスで使用され...
-
Visual C++からpingを実行して...
-
WSH.Runで待機できません
-
c言語でプロセスIDを調べたい
-
API関数 GetExitCodeProcess
おすすめ情報