【问题标题】:Embedded Outlook View Control嵌入式 Outlook 视图控件
【发布时间】:2008-09-25 13:04:20
【问题描述】:

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

我的加载项正在使用自定义文件夹主页,该主页显示我的自定义表单,其中包含 Outlook 视图控件。

每次尝试设置 OVC 的文件夹属性时,我都会收到带有“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,没有任何更新,一切正常。

【问题讨论】:

  • 为什么取出COM错误码?
  • 我取出了COM错误码,因为每次都不一样。我最近意识到只有前 4 个密码不同,但其余的始终相同(0009)。

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


【解决方案1】:

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

插件在启动过程中,加载非默认的 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);
 }

解决方案是不再使用“文档”作为名称,而是使用新的名称。问题与具体名称无关。

【讨论】:

    【解决方案2】:

    Dobri Dan,nency :)

    鉴于此处的信息,我不知道我是否真的可以提供“银弹”解决方案……但这里有一些想法/注意事项可供尝试:

    过去曾在几个项目中使用 Outlook,我可以告诉您,在授予/授予外部用户/进程访问权限时,它有时是一只有趣的鸟。有时需要用户手动确认访问或登录...所以请确保您有

    app.Session.Logon() 
    

    在某处得到照顾。

    我注意到的另一件事是使用 app.ActiveExplorer() 确保该函数返回的正是您认为的那样;它采用用户桌面上的最顶层窗口...通常是但并不总是您尝试使用的窗口,所以请仔细检查。

    【讨论】:

    • Dobar dan :) 会话已经登录,再次尝试登录没有结果。似乎活跃的资源管理器总是正确的,除了返回的引用有时为空(?)。也许问题出在某些突然改变的安全设置上?
    猜你喜欢
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    相关资源
    最近更新 更多