我们有一个添加联系人到outlook的功能。
我只是想对现有的outlook进程执行此操作,如果一个正在运行或未运行则打开。
I get error:
使用CLSID为组件检索COM类工厂{0006F03A-0000-0000-C000-000000000046}失败,原因如下error: 80080005 Server execution failed (Exception from HRESULT:0 x80080005 (CO_E_SERVER_EXEC_FAILURE))。如果过程中没有已经运行。
注意:下面的方法被调用了2次。
我的代码是:Private Sub InitObject()
If (Process.GetProcessesByName("OUTLOOK").Count > 0) Then
objOutlook = DirectCast(Marshal.GetActiveObject("Outlook.Application"), Outlook.Application)
'If objOutlook Is Nothing Then
Else
objOutlook = New Outlook.Application()
End If
If objNamespace Is Nothing Then
objNamespace = objOutlook.GetNamespace("MAPI")
objNamespace.Logon("", "", False, False)
End If
If objFolder Is Nothing Then
objFolder = objNamespace.GetDefaultFolder(10)
End If
End Sub
我读了几个关于这个的帖子,说的是管理员特权和所有。现在我在没有管理员权限的情况下运行Visual Studio。我很神圣,这个错误也会在生产中看到,我们不使用Visual Studio?
您在有问题的PC上安装了什么版本的Outlook ?是Outlook 2010的Click2Run版本吗?
无论如何,我认为有两个可能的原因:
- PC上已经安装了Click2Run版本的Office 2010。事实上,office2010的Click2Run版本并不支持自动化。有关详细信息,请参见Office 2010与外接程序的点击运行兼容性。此外,你还可以找到"如何:验证Outlook是否是计算机上的点击运行应用程序"一文。
- 您的程序和MS Outlook必须同时以管理员或普通权限级别运行。他们应该享有同样的特权。您可能会发现如何在UAC下将应用程序自我提升到高权限级别一篇文章很有帮助。
请注意,Outlook是单例的。例如,如果它已经在运行,当你创建一个新的Outlook应用程序实例时,你会得到一个指向已经在运行的实例的指针。