Process.start メソッド - エラーダイアログの自動表示

失敗

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 を補足するだけです。

[C# - エラーダイアログの自動表示と 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 は発生しません。

不明な拡張子 (Windows XP)
図2 不明な拡張子 (Windows XP)

図2 不明な拡張子 (Windows XP)
不明な拡張子 (Windows 2000)
図1 不明な拡張子 (Windows 2000)

図1 不明な拡張子 (Windows 2000)

(2) 指定されたファイルに関連付けられているアプリケーションが見つからない場合

拡張子に関連付けられているアプリケーションが見つからない場合に、表示されます。 (1) と異なる点は、拡張子にアプリケーションが関連付けられていることです。EXE ファイルが削除されたなどの理由により、発生します。
『キャンセル』ボタンを押下すると、System.ComponentModel.Win32Exception が発生します。

関連アプリなし (Windows XP)
図4 関連アプリなし (Windows XP)

図4 関連アプリなし (Windows XP)
関連アプリなし (Windows 2000)
図3 関連アプリなし (Windows 2000)

図3 関連アプリなし (Windows 2000)

(3) 存在しないパスを指定した場合

存在しないパスを指定した場合に、表示されます。
ダイアログを閉じると、System.ComponentModel.Win32Exception が発生します。

存在しないパス (Windows XP)
図6 存在しないパス (Windows XP)

図6 存在しないパス (Windows XP)
存在しないパス(Windows 2000)
図5 存在しないパス (Windows 2000)

図5 存在しないパス (Windows 2000)

(4) 未認証のマシン上のパスを指定した場合

未認証のマシンにあるファイルを起動した場合に、表示されます。
System.ComponentModel.Win32Exception は発生しません。

未認証 (Windows XP)
図8 未認証 (Windows XP)

図8 未認証 (Windows XP)
未認証(Windows 2000)
図7 未認証 (Windows 2000)

図7 未認証 (Windows 2000)

参考サイト

コメント

コメント投稿
(非公開)
     « アイコン一覧 »
(必須)

作成日:2007/01/21
更新日:2007/01/21