禁用Outlook加载项,因为它太慢

时间:2019-02-18 11:44:50

标签: c# outlook outlook-addin add-in

我正在使用C#开发一个简单的Outlook加载项。现在,当我测试该版本时,Outlook突然显示一条错误消息并禁用了我的加载项:

This add-in caused Outlook to start slowly. (1.594 seconds)

我不确定是什么原因造成的。我所做的Onload都是这些:

功能区按钮
我使用的是一个功能区按钮,该按钮在AddIn中进行了如下初始化:

protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
      return new MyRibbonButton();
    }

功能区按钮构造器
功能区按钮初始化一个对象。所以还没有什么特别的。

public MyRibbonButton()
{
    this.guiSettings = new AppSettingsManager(root.localmachine, "GUI", false);
}

...

public AppSettingsManager(root type, string subpath, bool writable)
{
    if (subpath != "")
    {
        this.PATH += @"\" + subpath;
    }
    this.type = type;
    this.writable = writable;
}

图标
在同一MyRibbonButton类中,我根据注册表中的值声明要用于按钮的图标。

public Bitmap imageSuper_GetNotifyImage(IRibbonControl control)
{
    switch (guiSettings.GetValueInt32("Icon", 1))
    {
        case 1:
            return Properties.Resources.icon1;
        case 2:
            return Properties.Resources.icon2;
        case 3:
            return Properties.Resources.icon3;
        default:
            return Properties.Resources.icon1;
    }

}

如您所见,除了最后一部分中的“注册表阅读器”,我没有做任何特别的事情。您是否认为这会导致Outlook启动缓慢?如果是这样,我该如何对其进行优化。

1 个答案:

答案 0 :(得分:1)

您将因加载.Net系统而受到处罚。曾经有一个“热身”注册表项,可用于迫使Outlook加载正确版本的.Net运行时,而不会受到惩罚,但是该项不再起作用。

我能够解决该问题的唯一方法是在Delphi中创建一个存根加载项(如果不是更好,C ++也会运行得很好),什么也没做,只能由Outlook加载(大约20毫秒)并启动计时器。当计时器触发时(Outlook将处于空闲状态并且不监视外接程序),它将使用IManagedAddin接口加载从属.Net外接程序。