アプリ版:「スタンプのみでお礼する」機能のリリースについて

解決していないのに締め切られてしまったようなので再度質問します
前はこちらです https://oshiete.goo.ne.jp/qa/9419545.html

windows7でいくつかのプログラムを実行しているときにあるプログラムを実行するとたまに


問題が発生したため、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はWindowsから通知されます。


と表示されます
これが表示されると処理がそこで止まってしまい次のプログラムが実行されないためどうしたらこれが表示されないようにできますか
それかこれが表示されても処理を続けるにはどうしたらよいでしょうか



例えば以下のプログラムを実行した時
#include <cstdio>
#include <process.h>

int main(int argc, char** argv)
{
int ret;

ret = system("test.exe 1 2 3");
printf("%d\n", ret);
ret = system("test.exe 4 5 6");
printf("%d\n", ret);
ret = system("test.exe 7 8 9");
printf("%d\n", ret);

return 0;
}

system("test.exe 1 2 3");でエラーが起きると、エラー表示されたダイアログを閉じないと以降の処理が実行されません
これをダイアログを出さないで処理するか自動的に処理を継続する方法はありますか

質問者からの補足コメント

  • > 自身のプログラムが呼び出した外部関数等がエラー終了して来ても処理を続ければよいだけです。

    エラーが発生してもダイアログが表示されると制御が戻ってこないので、処理が続けられません。

    > 自身のプログラムが呼び出した外部関数等の先で独自にエラーダイアログを表示している場合、その外部関数等の引数などに「ダイアログ表示をしない」指定が無い限り抑止出来ません。

    質問にある通り独自のエラーダイアログではなく勝手に表示されるダイアログです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/09/25 00:05
  • CreateProcessをつかってみましたがエラーダイアログは表示されるようでした
    処理は並行して行われるようなのでそれを利用できるか試してみます
    最後の案については他に手段がない場合に検討してみようと思います、ありがとうございます

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/09/25 00:08
  • Windowsの設定を変更することで解決しました。

      補足日時:2016/09/28 00:32

A 回答 (2件)

こんにちは。


system関数ではなく、Win32APIのCreateProcess関数を使ってみてはどうでしょうか。
http://www.ne.jp/asahi/hishidama/home/tech/c/win …

CreateProcessで起動後、test.exeのプロセスが起動中である事を監視するループを作成し、
プロセスが終了したら次の起動を行う構造にしておきます。

監視ループ中では以下案の処理を行い、test.exeを終了させます。

<案①>
 test.exeの起動推定時間を超過したら、
 Win32APIのTerminateProcess関数を実行してtest.exeを強制終了する。
 (一番実現性が高い方法と考えられます)

<案②>
 Win32APIのFindWindow関数を用いてエラーダイアログの出現を監視し、出現したら、
 TerminateProcess関数を実行してtest.exeを強制終了する。
 (これはちょっと上手く行かないかもしれません)


※別の方法として
 昔あったチューチューマウスの様なフリーソフトをインストールし、
 エラーダイアログが出現したらそのボタンをクリックする設定にして実行しておく。
 (これが可能であればプログラムの改訂が要らず、一番楽だと思います。)
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ダイアログを表示しない設定を見つけられました。

お礼日時:2016/09/25 00:06

自身のプログラムが呼び出した外部関数等がエラー終了して来ても処理を続ければよいだけです。


 自身のプログラムが呼び出した外部関数等の先で独自にエラーダイアログを表示している場合、その外部関数等の引数などに「ダイアログ表示をしない」指定が無い限り抑止出来ません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ダイアログを表示しない設定を見つけられました。

お礼日時:2016/09/25 00:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!