嵌入式Outlook视图控件

时间:2020-03-06 14:43:09  来源:igfitidea点击:

我正在尝试使用Windows XP SP3和Internet Explorer 7上的Visual Studio 2008制作Outlook 2003加载项。

我的加载项使用的是自定义文件夹主页,该文件夹显示了我的自定义表单,该表单包装了Outlook View Control。

每次尝试设置OVC的Folder属性时,都会收到描述为"来自HRESULT的异常:0xXXXXXXXX"的COM异常。错误代码是随机数,每次都不同。这不是对控件属性的首次访问,在此之前,已经设置了View和ViewXML属性。控件被标记为脚本安全。

我正在使用活动资源管理器的CurrentFolder.FolderPath属性的值,这似乎是正确的选择:

Outlook.Explorer currentExplorer = app.ActiveExplorer();
        if (currentExplorer != null)
        {
            ovcWrapper.Folder = currentExplorer.CurrentFolder.FolderPath;
        }

这是堆栈跟踪的顶部:

System.Runtime.InteropServices.COMException (0xXXXXXXXX): Exception from HRESULT: 0xXXXXXXXX
at Microsoft.Office.Interop.OutlookViewCtl.ViewCtlClass.set_Folder(String pVal)
at AxMicrosoft.Office.Interop.OutlookViewCtl.AxViewCtl.set_Folder(String value)..

仅当文件夹位于非默认PST文件中时,才会发生这种情况。更改为默认PST文件中的文件夹不会产生任何异常。

我必须强调,去度假前一切都很好:)。似乎Windows XP安装了一些更新,这些更新在我不在时更改了Internet Explorer或者Outlook 2003的默认安全性。

在具有Office 2007和Internet Explorer 6的另一台(虚拟机)上,没有任何更新,一切正常。

解决方案

Dobri Dan,nency :)
考虑到这里的信息,我不知道我是否真的可以提供"银弹"解决方案...但是这里有一些想法/注释可供尝试:
过去曾与Outlook一起处理过几个项目,我可以告诉我们,有时在授予/授予对外部用户/进程的访问权限时,这是一个有趣的小鸟。有时它需要用户手动确认访问权限或者登录...,以确保我们拥有

app.Session.Logon()

照顾了某个地方。
我注意到的另一件事是对app.ActiveExplorer()的使用,请确保此函数返回的正是我们所认为的样子;它占据了用户桌面上最顶层的窗口……这是通常的情况,但并非总是我们尝试使用的窗口,因此请仔细检查。

一段时间后,我终于找到解决方案:将外部存储的名称更改为新名称。

在外接程序启动期间,它将加载非默认的PST文件,并将其名称(不是pst文件的名称,而是根文件夹的名称)更改为"文档"。

这是代码:

session.AddStore("C:\test.pst"); // loads existing or creates a new one, if there is none.
storage = session.Folders.GetLast(); // grabs root folder of the new fileStorage.

if (storage.Name != storageName) // if fileStorage is brand new, it has default name.
{
      storage.Name = "Documents";
      session.RemoveStore(storage); // to apply new fileStorage name, it have to be removed and added again.
      session.AddStore(storagePath);
 }

解决方案是不再使用"文档"作为名称,而是新的东西。问题与特定名称无关。