嵌入式Outlook视图控件

时间:2008-09-25 13:04:21

标签: c# .net visual-studio-2008 outlook add-in

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

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

每当我尝试设置OVC的Folder属性时,我都会收到来自HRESULT:0xXXXXXXXX的'异常'的COM Exception。错误代码是一个随机数,每次都不同。它不是第一次访问控件的属性,在此之前,已经设置了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的另一台(虚拟机)上,没有任何更新,一切正常。

2 个答案:

答案 0 :(得分:2)

过了一会儿,我终于找到了解决方案:将外部存储的名称更改为新的名称。

在启动插件期间,它会加载非默认的PST文件,并将其名称(不是pst文件的名称,而是根文件夹的名称)更改为“Documents”。

这是代码:

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);
 }

解决方案不是再使用'Documents'作为名称,而是使用新的东西。问题与具体名称无关。

答案 1 :(得分:1)

Dobri Dan,nency :)

我不知道我是否真的可以提供一个“银弹”解决方案给出这里的信息...但这里有一些想法/注意事项尝试out:

在过去的一些项目上与Outlook合作过,我可以告诉你,有时候给予/授予外部用户/进程访问权限,这是一个有趣的鸟。有时需要用户手动确认访问权限或登录...所以请确保您有

app.Session.Logon() 

在某个地方照顾。

我注意到的另一件事是使用app.ActiveExplorer()确保此功能完全按照您的想法返回;它需要用户桌​​面上的最顶层的窗口...这通常是,但并不总是您尝试使用的窗口,所以只需要双击。