12242


開発PC：Windows XP＋VC6  
実行PC：Windows XP or Windows7

MFCで作られたアプリからバッチファイルをモーダルで実行してバッチファイルの終了待ちをしたいと考えています。

バッチファイルは末尾に「pause」を入れて何らかのキー入力かウィンドウを閉じることで  
終了とします。

・バッチファイル実行部

[code]

    STARTUPINFO siStartInfo ;
    PROCESS_INFORMATION piProcInfo ;
    
    GetStartupInfo(&siStartInfo);
    
    if(!CreateProcess(NULL,
                    "[cmd.exeのフルパス] /c [バッチファイルのフルパス]",
                    NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,           
                    NULL, NULL,
                    &siStartInfo,
                    &piProcInfo)){
        return FALSE;
    }
    
    WaitForSingleObject(piProcInfo.hProcess,INFINITE);
    CloseHandle(piProcInfo.hProcess);
    CloseHandle(piProcInfo.hThread);
    
[/code]

・バッチファイルの中身

[code]

    @echo off
    echo TestTest
    pause
    
[/code]

WaitForSingleObjectで終了待ちをしているのですが、  
WindowsXP上で実行すると、プロンプト画面でキーの入力＆ウィンドウ終了が出来ますが、  
同じアプリをWindows7で実行すると、プロンプト画面でキーの入力もウィンドウの終了も出来ません。

WindowsXPとWindows7とで、WaitForSingleObjectの挙動が変わったのでしょうか？

■2015/06/05追記  
下記の様にしたら出来ました。

[code]

    while(WaitForSingleObject(piProcInfo.hProcess,100) == WAIT_TIMEOUT){
        app->PumpMessage();     // 定期的にメッセージキューを消化させます
    }
    
[/code]

メッセージが処理されていなかったようです。


CC BY-SA 3.0
2015-02-19T23:16:35.207
6796
2015-07-10T05:00:31.343
2015-06-04T21:08:09.443
8328
8328
question
windows c++ mfc batch-file
WaitForSingleObjectによるバッチファイルの終了待ちについて


下記の様にすることで対策しました。

[code]

    while(WaitForSingleObject(piProcInfo.hProcess,100) == WAIT_TIMEOUT){
        app->PumpMessage();     // 定期的にメッセージキューを消化させます
    }
    
[/code]


CC BY-SA 3.0
2015-07-10T05:00:31.343
12242
2015-07-10T05:00:31.343
8328
6796
answer