3

有没有比抛出异常更好的方法从加载项代码中关闭 Outlook 2010 的 VSTO 加载项?
我不喜欢抛出异常,因为 Outlook 可能认为我的加载项不稳定。


---编辑:---
关闭我的意思是停止执行加载项代码并隐藏其 UI 或停用。但我希望在重新启动 Outlook 后启用它

4

2 回答 2

3

当你在 VS2010 中创建你的 VSTO 项目时,下面的代码应该会自动生成在你的ThisAddIn.cs. 如果没有,您可能想自己添加它们。

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
     this.Startup += new System.EventHandler(ThisAddIn_Startup);
     this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
     //execute your code here, e.g. output some values to a text file 
}

您可以将代码放在 ThisAddIn_Shutdown 事件中,并仅在加载项关闭时执行它。

编辑:这是 MSDN 所说的:

从 Outlook 2010 开始,默认情况下,Outlook 不会向加载项发出正在关闭的信号。具体来说,Outlook 在快速关机期间不再调用 IDTExtensibility2 接口的 OnBeginShutdown 和 OnDisconnection 方法。同样,使用 Microsoft Visual Studio Tools for Office 编写的 Outlook 加载项在 Outlook 关闭时不再调用 ThisAddin_Shutdown 方法。

更多细节在这里:http:
//msdn.microsoft.com/en-us/library/office/ee720183.aspx#OL2010AdditionalShutdownChanges_AddinShutdownChangesinOL2010Beta

于 2013-03-08T02:45:23.687 回答
1

尝试这个:

public void UnloadAddInManually()
{
    //Try find our Add-In...
    foreach (COMAddIn comAddIn in this.Application.COMAddIns)
    {
        if (comAddIn.ProgId.Contains("< ADDIN_PROG_ID >"))
        {
            //Found Add-In: Unload it...
            comAddIn.Connect = false;
            break;
        }
    }
}

这对我来说是在 EXCEL 中工作的。

注意:当您在办公室主机应用程序的“设置 > 加载项 > COM-加载项”下查看时,您可以找到您的 <ADDIN_PROG_ID >。

于 2017-03-01T12:59:27.617 回答