次のレジストリ値を値 DWORD 2 に設定してみてください。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode = 2
これは、マシン上のすべてのプロセスに影響します。
参照:
システムおよびアプリケーションのポップアップ メッセージを削除する方法
クラッシュするプログラムのソース コードがある場合は、すべての構造化された例外をキャッチし、メッセージ ボックスをポップアップせずに終了することで、ポップアップを防ぐことができます。これを行う方法は、使用するプログラミング言語によって異なります。
ソースがない場合は、親で SetErrorMode 関数を使用してポップアップを抑制します。エラーモードはサブプロセスに継承されます。これを機能させるには、UseShellExecute を false に設定する必要があります。
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace SubProcessPopupError
{
class Program
{
[DllImport("kernel32.dll", SetLastError = true)]
static extern int SetErrorMode(int wMode);
static void Main(string[] args)
{
int oldMode = SetErrorMode(3);
Process p;
ProcessStartInfo ps = new ProcessStartInfo("crash.exe");
ps.UseShellExecute = false;
p = Process.Start(ps);
SetErrorMode(oldMode);
p.WaitForExit();
}
}
}
「選択したデバッガーを使用してデバッグしますか?」というダイアログが表示された場合は、このレジストリ値を 0 に設定することで無効にすることができます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Auto = 0
ただし、上記のようにエラーモードを 3 に設定している場合は、これは発生しないと思います。