失敗
ErrorDialog プロパティを true に設定した ProcessStartInfo オブジェクトを引数に、Process.start メソッドを呼び出します。 このようにすることで、プロセスの起動に失敗したときに、エラーダイアログが自動で表示されます。
しかし、ダイアログが自動表示された後に System.ComponentModel.Win32Exception が発生するというケースに遭遇してしまいました。
環境
このレポートは、以下の環境について記述したものです。
| OS | Windows 2000 SP 4, Windows XP SP 2 |
| .NET | .NET Framework 1.0, 1.1, 2.0 |
原因
以下の 2 ケースで、System.ComponentModel.Win32Exception が発生します。
解決策
System.ComponentModel.Win32Exception を補足するだけです。
try
{
string path = @"C:\sample.txt";
ProcessStartInfo info = new ProcessStartInfo(path);
// プロセスを起動できなかった場合、Windows のエラーダイアログを表示させるように設定
info.ErrorDialog = true;
// 外部プロセスを起動
Process.Start(info);
}
catch (System.ComponentModel.Win32Exception)
{
// Win32Exception を補足
}
補足
■ プロセス起動失敗時に表示させるダイアログ
(1) 不明な拡張子のファイルを起動
アプリケーションが関連付けられていない拡張子が付いたファイルを起動した場合に、表示されます。
System.ComponentModel.Win32Exception は発生しません。
(2) 指定されたファイルに関連付けられているアプリケーションが見つからない場合
拡張子に関連付けられているアプリケーションが見つからない場合に、表示されます。
(1) と異なる点は、拡張子にアプリケーションが関連付けられていることです。EXE ファイルが削除されたなどの理由により、発生します。
『キャンセル』ボタンを押下すると、System.ComponentModel.Win32Exception が発生します。
(3) 存在しないパスを指定した場合
存在しないパスを指定した場合に、表示されます。
ダイアログを閉じると、System.ComponentModel.Win32Exception が発生します。
(4) 未認証のマシン上のパスを指定した場合
未認証のマシンにあるファイルを起動した場合に、表示されます。
System.ComponentModel.Win32Exception は発生しません。
