7

我目前正在为 Microsoft Outlook 开发 C# .NET 插件。 加载项的目标是捕获来自 Outlook 即时搜索的搜索输入,并在自定义窗格中显示我自己的搜索结果。

它工作得很好,并且通过使用本机窗口对 Outlook 窗口进行子类化,我得到了搜索字符串,并且它已经将它传递到我的面板中。

现在的问题是,当您关闭插件时(通过“ File->Options->Add-Ins->COM Add-Ins ”,但使用窗格中的 X),插件会立即终止而且我不能 searchboxWindow.ReleaseHandle()事先打电话来恢复我的 WndProc 链。Outlook 只是崩溃而没有任何可见的错误。

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    switch ((uint)m.Msg)
    {
        case WindowMessages.WM_DESTROY:
        case WindowMessages.WM_QUIT:
        case WindowMessages.WM_NCDESTROY:
            this.ReleaseHandle();
            return;

        case WindowMessages.WM_KEYUP:
        case WindowMessages.WM_LBUTTONDOWN:
        case WindowMessages.WM_RBUTTONDOWN:
            OnKeyUp();
            break;

        case WindowMessages.WM_EXITSIZEMOVE:
            OnResize();
            break;
    }
}

我已经尝试收听一些在加载项关闭时应该调用的窗口消息,但这些消息仅在我以正常方式关闭 Outlook 时出现。

此外,主加载项源文件中的事件(如AppDomain.CurrentDomain.ProcessExitthis.Shutdown或)((Outlook.ApplicationEvents_10_Event)this.Application).Quit不会被调用。

当加载项终止时,我可以(可靠地)监听什么事件?有吗?如果没有,我有什么方法可以解决我的问题?

4

3 回答 3

1

已解决:感谢Hans Passant

ThisAddIn_Shutdown当通过 COM 加载项对话框手动断开加载项时,似乎触发了事件。

于 2015-08-14T06:48:27.950 回答
0

确保在插件注册表中添加 DWORD RequireShutdownNotification=1,否则不会调用 ThisAddIn_Shutdown()

于 2019-04-01T22:40:33.893 回答
0

我不认为您可以在托管代码中做很多事情。未损坏的代码可以正常工作;COM 系统会礼貌地询问您是否可以通过调用DllCanUnload.

于 2015-08-11T16:18:39.610 回答