C#Outlook-用户退出

C#Outlook-用户退出,c#,.net,com,outlook,C#,.net,Com,Outlook,我们正在使用.Net 3.0为Outlook编写联系人同步应用程序。我们正在使用“Microsoft Outlook 12.0对象库”或Microsoft.Office.Interop.Outlook 当我们打电话时,我们注意到: ApplicationClass app = new Microsoft.Office.Interop.Outlook.ApplicationClass(); 如果用户没有打开Outlook,它将启动Outlook。但是,如果用户在应用程序打开时关闭Outlook,

我们正在使用.Net 3.0为Outlook编写联系人同步应用程序。我们正在使用“Microsoft Outlook 12.0对象库”或Microsoft.Office.Interop.Outlook

当我们打电话时,我们注意到:

ApplicationClass app = new Microsoft.Office.Interop.Outlook.ApplicationClass();
如果用户没有打开Outlook,它将启动Outlook。但是,如果用户在应用程序打开时关闭Outlook,则下次引用Outlook ApplicationClass实例时会收到一个COMException

我们如何补偿这种行为?如果出现此异常,我们不希望重新打开Outlook

我们希望Outlook根本不启动,或者被隐藏,但我们希望用户能够使用Outlook,即使我们的应用程序处于打开状态

我们也可以以某种方式连接到ApplicationExit事件或其他东西,但如果我们在此时创建一个新的ApplicationClass,它会再次启动Outlook吗


如何解决此问题?

如果主机应用程序不运行,您将无法使用Outlook(或任何Office)COM互操作库,而且(据我所知)Outlook不提供运行多个实例的功能,因此创建自己的隐藏实例可能不是一个选项


我唯一的建议是捕捉异常,向用户显示一个警告对话框,不要关闭Outlook,然后优雅地重新打开它。很明显,这不是您想要的解决方案,但我看不到强制Outlook说“打开”的方法。

如果主机应用程序不运行,您将无法使用Outlook(或任何Office)COM互操作库,而且(据我所知),Outlook不提供运行多个实例的功能,因此,创建自己的隐藏实例可能不是一个选项


我唯一的建议是捕捉异常,向用户显示一个警告对话框,不要关闭Outlook,然后优雅地重新打开它。显然,这不是您要寻找的解决方案,但我看不到强制Outlook说“打开”的方法。

我同意Adam的观点,但您应该钩住process.exit事件,然后重新创建对象,而不是捕获异常。这将启动outlook的新实例。这就是它的工作原理。或者,您只能在用户启动Outlook时运行同步


如果涉及到exchange服务器,您可以查看针对exchange的API。

我同意Adam的观点,但您不应该捕获异常,而应该钩住process.exit事件,然后重新创建对象。这将启动outlook的新实例。这就是它的工作原理。或者,您只能在用户启动Outlook时运行同步


如果涉及到exchange服务器,您可以查看针对exchange的API。

如果您的outlook用户是exchange用户,您也可以与exchange同步(确定,这取决于您正在执行的操作)。连接有许多选项,具体取决于版本:Exchange Web Services、DAV或通过Mapi。如果outlook用户是Exchange用户,您也可以改为与Exchange同步(确定,这取决于您正在执行的操作)。连接有很多选择,取决于版本:Exchange Web Services、DAV或通过Mapi。我认为这是最好的选择,尽管我不认为Microsoft提供了其他方法,但我认为这是最好的选择,虽然丑陋,但我不认为微软提供了另一种方式,我们希望它只与Outlook一起工作,而不与exchange服务器一起工作。通过这种方式,它支持多个电子邮件服务器。我们希望它仅与Outlook一起工作,而不与exchange服务器一起工作。通过这种方式,它支持多个电子邮件服务器。