【问题标题】:Outlook 2003 mail window freezes on click of Send buttonOutlook 2003 邮件窗口在单击发送按钮时冻结
【发布时间】:2011-04-26 14:59:42
【问题描述】:

我使用 VSTO + VS 2008 开发了 Outlook 2003 插件。

有一个 VB 6 应用程序创建一个 Outlook 邮件实例,将一个文档附加到它并显示给用户发送。

当用户单击“发送”按钮时,邮件窗口会冻结。它只发生在生产机器上。

VB6代码如下:

Private Sub Command1_Click()

Dim objOlApp As New Outlook.Application
Dim objMailItem As Outlook.MailItem
Dim objAttachments As Attachments
Dim arrFilesToAttach(1) As String

    Set objOlApp = New Outlook.Application
    Set objMailItem = objOlApp.CreateItem(olMailItem)
    Set objAttachments = objMailItem.Attachments

    arrFilesToAttach(0) = Text1.Text

    For l = 0 To 0
        strTemp = arrFilesToAttach(l)
        If strTemp <> "" Then
            objAttachments.Add arrFilesToAttach(l)
        End If
    Next

    objMailItem.Display True

    Set objOlApp = Nothing
    Set objMailItem = Nothing
    Set objAttachments = Nothing
End Sub

查看它是否是我的插件正在创建一个问题。我创建了一个简单的 Outlook 插件并将一些文件 IO 代码添加到启动事件内部 try...catch 块。我禁用了以前的插件并安装了这个新的示例插件。

结果令人惊讶,示例插件也造成了问题。对于示例插件,它将注册表中的 LoadBehaviour 更改为 2。 try...catch 块没有捕获异常。我为 Appdomain 的 unhandledException 添加了一个处理程序,但它也没有被触发。

请帮助...提前致谢。

【问题讨论】:

    标签: c# vsto outlook-addin


    【解决方案1】:

    如果 Outlook 将您的插件的 loadbehaviour 更改为 2,这通常意味着该插件在加载期间出现故障,并且 Outlook 正在禁用它。

    插件在加载时可能出现错误的原因有很多(缺少引用的 dll、权限等),所以这是一个问题。

    要确定您的插件是否挂起发送进程,只需禁用您的插件(例如将 loadbehavior 设置为 0)。不需要为此创建示例插件。

    如果在禁用插件时一切正常,但在启用时失败,则插件中很可能有问题。

    那时,我要做的就是开始“释放”代码块。

    我的意思是我开始注释入口点(或注释掉所有入口点,一次只取消注释一个)。

    例如,如果您在 Startup 事件中发生了一些事情,请将其注释掉,重新编译并测试。如果没有失败,请删除该评论,并在链上更上一层评论其他内容。

    我也倾向于使用大量的日志记录(通常使用 Log4Net,但实际上你可以使用任何东西)。

    【讨论】:

    • “我也倾向于使用大量日志记录” - 我想补充一点,有时这是找出调用哪个命令的唯一方法。我在使用调试器和逐步处理时更改命令链的情况。这里有一些 tailwatcher 很好(我正在使用 LobExpert)。
    • 好吧,当我正常启动 Outlook 时,我的插件工作正常。 Outlook 不会禁用它。当 Outlook 没有在机器上运行并且我直接运行 VB6 代码时会出现问题。 Startup 事件本身没有触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多