私は、生成されたテキストの電子メールを人々が送信できるようにするアプリケーションのセクションがあります。現在の問題は、ユーザーがOutlookをインストールしていないときに、テキストをフォームにロードすると、処理されない例外System.IO.FileNotFoundがスローされることです。フォームの読み込み時に、私はOutlookがインストールされているかどうかを判断しようとします。OutlookがC#例外処理でインストールされているかどうかのテスト
try{
//Assembly _out = Assembly.Load("Microsoft.Office.Interop.Outlook");
Assembly _out = Assembly.Load("Microsoft.Office.Interop.Outlook, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c");
//Microsoft.Office.Interop.Outlook.Application _out = new Microsoft.Office.Interop.Outlook.Application();
//Microsoft.Office.Interop.Outlook.Application _out = new Microsoft.Office.Interop.Outlook.Application();
}
上記は私が試したコードです。私が開発しているコンピュータでは、アセンブリ名がオフの場合、catch文がそれをキャッチします。しかし、見通しのないXPマシンでテストすると、エラーがスローされ、フォームイベントのロードが停止します。
私は(すべてでも動作しませんでしたキャッチ)しようとしているすべてのcatch文:
catch (System.IO.FileLoadException)
{ _noOutlook = true; type = "FILE-LOAD"; }
catch (System.IO.FileNotFoundException)
{ _noOutlook = true; type = "FILE-NOT-FOUND"; }
catch (System.IO.IOException)
{ _noOutlook = true; type = "IO"; }
catch (System.Runtime.InteropServices.COMException)
{ _noOutlook = true; type = "INTEROP"; }
catch (System.Runtime.InteropServices.InvalidComObjectException)
{ _noOutlook = true; type = "INTEROP-INVALIDCOM"; }
catch (System.Runtime.InteropServices.ExternalException)
{ _noOutlook = true; type = "INTEROP-EXTERNAL"; }
catch (System.TypeLoadException)
{ _noOutlook = true; type = "TYPELOAD"; }
catch (System.AccessViolationException)
{ _noOutlook = true; type = "ACCESVIOLATION"; }
catch (WarningException)
{ _noOutlook = true; type = "WARNING"; }
catch (ApplicationException)
{ _noOutlook = true; type = "APPLICATION"; }
catch (Exception)
{ _noOutlook = true; type = "NORMAL"; }
私はOutlook 2010のために働くために一つのコードを使用することができますので、うまくいけば(動作する方法を探しています& 2007)。レジストリ/正確なファイルパスを確認する必要はありません。
私は、XPでエラーが発生してもキャッチしないのはなぜですか?なぜなら、XPNはキャッチしたときにFileNotFoundをスローし、Outlookのinteropオブジェクト働くでしょう。
これは魅力のように働いた、ありがとうございます。それは、OutlookなしでOutlook 2010とXPでWindows 7で動作しました。 – UnholyRanger