使用Outlook Interop避免发现文件未找到异常

时间:2013-01-07 13:20:20

标签: vb.net com outlook interop

我有一个简单的单例模式类,我的应用程序通过它与outlook集成,并且运行我的应用程序的几台计算机没有安装outlook。我已将所有互操作内容包装在try-catches中,以避免在outlook无法使用时引发异常,但我仍然会收到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,版本= 11.0.0.0,   Culture = neutral,PublicKeyToken = 71e9bce111e9429c'或其中一个   依赖。该系统找不到指定的文件。   System.IO.FileNotFoundException
  在OutlookIntegration..ctor()
  在OutlookIntegration.vb中的OutlookIntegration.Initialize()中:第7行   在ApplicationEvents.vb中的MyApplication_Startup(Object sender,StartupEventArgs e):第139行

     

(System.IO.FileNotFoundException)无法加载文件或程序集'office,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 71e9bce111e9429c'或其依赖项之一。系统找不到指定的文件。

似乎我在这里缺少一些简单的东西。堆栈是否为红色鲱鱼?

1 个答案:

答案 0 :(得分:1)

在通话过程中将私人会员加载到内存( Outlook.ApplicationOutlook.NameSpace)时会抛出异常到OutlookIntegration构造函数( OutlookIntegration..ctor())并且客户端计算机上不存在相应的Outlook依赖项。

有几种方法可以解决这个问题:

  1. 当构造函数抛出此异常时处理错误(ctor方法中尝试/捕捉Initialize()声明)
  2. 创建另一个只测试Outlook是否已安装的类(避免使用私有成员
  3. 阅读Windows注册表项,告诉您Outlook是否存在
  4. 最好不要出于性能原因而抛出异常 - 所以#3将是我的偏好,但只要你没有连续执行此检查,你就可以使用这些选项。

相关问题