Addins无法在Outlook 2010 32bit上捕获日历事件

时间:2015-01-22 09:18:00

标签: c# outlook-addin

作为互联网上的指导,我写了一个示例插件来捕获日历(约会)添加/删除/更改事件,这是我的代码:

    private Outlook.Folder mOutlookFolder = null;
    private Outlook.Items mItems = null;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        mOutlookFolder = (Outlook.Folder)Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);

        mItems = mOutlookFolder.Items;
        mItems.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(CalendarItems_ItemChange);
        mItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(CalendarItems_ItemAdd);
        mItems.ItemRemove += new Outlook.ItemsEvents_ItemRemoveEventHandler(CalendarItems_ItemRemove);
    }

    private void CalendarItems_ItemChange(object Item)
    {
        MessageBox.Show("########## CHANGE");
    }
    private void CalendarItems_ItemAdd(object Item)
    {
        MessageBox.Show("########## ADD");
    }
    private void CalendarItems_ItemRemove()
    {
        MessageBox.Show("########## REMOVE");
    }

它在Outlook 2013 64bit上工作正常但是当我尝试使用outlook 2010 32bit时,事件不会被触发。那么这里发生了什么?

2 个答案:

答案 0 :(得分:3)

代码也应该在Outlook 2010 x86或x64中运行。有关详细信息,请参阅Running Solutions in Different Versions of Microsoft Office

最有可能是Outlook禁用了加载项。查看Outlook中的LoadBehavior Windows注册表项或COM加载项对话框。

Microsoft Office应用程序可以禁用意外行为的加载项。如果应用程序未加载您的加载项,则应用程序可能会对加载项进行硬禁用或软禁用。

当加载项导致应用程序意外关闭时,可能会发生硬禁用。如果在加载项中的启动事件处理程序正在执行时停止调试器,也可能在开发计算机上发生。

当加载项产生不会导致应用程序意外关闭的错误时,可能会发生软禁用。例如,如果在启动事件处理程序执行时抛出未处理的异常,应用程序可能会软禁用加载项。

重新启用软禁用加载项时,应用程序会立即尝试加载加载项。如果最初导致应用程序软件禁用加载项的问题尚未修复,则应用程序将再次软禁用加载项。

有关详细信息,请参阅How to: Re-enable an Add-in That Has Been Disabled

答案 1 :(得分:1)

我遇到了与日历项目相同的问题。 声明项目'静态'为我解决了。

private static Outlook.Folder mOutlookFolder = null;
private static Outlook.Items mItems = null;