1

アプリケーションを Outlook と統合する単純なシングルトン パターン クラスがありますが、アプリケーションを実行するいくつかのコンピューターには Outlook がインストールされていません。Outlook が使用できない場合に例外が発生しないように、すべての相互運用機能を try-catch でラップしましたが、FileNotFound例外を伴う自動化されたバグ レポートを引き続き取得しています。

これが私のクラスの(関連するコード)です:

Imports Microsoft.Office.Interop
Public Class OutlookIntegration
    Private Shared _instance As OutlookIntegration

    Public Shared Sub Initialize()
        _instance = New OutlookIntegration()
    End Sub

    Private _outlookApp As Outlook.Application
    Private _outlookNs As Outlook.NameSpace
    Private ReadOnly _outlookEnabled As Boolean

    Private Sub New()
        Try
            _outlookApp = New Outlook.Application   
            _outlookNs = _outlookApp.GetNamespace("mapi")
            _outlookNs.Logon()

        Catch ex As Exception
            _outlookApp = Nothing
            _outlookEnabled = False
            Exit Sub
        End Try

        _outlookEnabled = True
    End Sub
End Class

そして、私が得ているエラーはこれです:

メッセージ: ファイルまたはアセンブリ 'office、Version=11.0.0.0、Culture=neutral、PublicKeyToken=71e9bce111e9429c' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
OutlookIntegration.vb の OutlookIntegration.Initialize()での OutlookIntegration..ctor() でのSystem.IO.FileNotFoundException : ApplicationEvents.vb での MyApplication_Startup(Object sender, StartupEventArgs e) での
行 7 : 行 139

(System.IO.FileNotFoundException) ファイルまたはアセンブリ 'office、Version=11.0.0.0、Culture=neutral、PublicKeyToken=71e9bce111e9429c' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

ここで単純なものが欠けているようです。スタック トレースは厄介者ですか?

4

1 に答える 1

1

コンストラクター ( OutlookIntegration..ctor() )の呼び出し中にプライベート メンバーがメモリ ( Outlook.ApplicationOutlook.NameSpaceなど) に読み込まれ、適切な Outlook 依存関係がクライアント コンピューターに存在しない場合に、例外がスローされます。OutlookIntegration

これを処理するには、いくつかの方法があります。

  1. コンストラクターがこの例外をスローしたときにエラーを処理します (メソッド内で宣言を試行/キャッチctorInitialize())
  2. Outlook がインストールされているかどうかをテストするだけの別のクラスを作成します (プライベート メンバーの使用は避けてください) 。
  3. Outlook が存在するかどうかを示す Windows レジストリ キーを読む

パフォーマンス上の理由から、常に例外をスローしないことが最善です。したがって、#3 が私の好みですが、このチェックを継続的に実行しない限り、これらのオプションのいずれを使用してもかまいません。

于 2013-01-07T17:48:00.240 に答える