C# Outlook 2003邮件窗口在单击“发送”按钮时冻结

C# Outlook 2003邮件窗口在单击“发送”按钮时冻结,c#,vsto,outlook-addin,C#,Vsto,Outlook Addin,我用VSTO+VS2008开发了Outlook 2003插件 有一个VB6应用程序,它创建Outlook邮件的一个实例,将一个文档附加到该实例,并将其显示给用户发送 当用户单击“发送”按钮时,邮件窗口冻结。它只发生在生产机器上 VB6代码如下所示: Private Sub Command1_Click() Dim objOlApp As New Outlook.Application Dim objMailItem As Outlook.MailItem Dim objAttachments

我用VSTO+VS2008开发了Outlook 2003插件

有一个VB6应用程序,它创建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
Private子命令1_Click()
将应用程序设置为新Outlook.Application
将objMailItem设置为Outlook.MailItem
作为附件的Dim OBJA附件
Dim ARRFILES以字符串形式附加(1)
Set objOlApp=newoutlook.Application
设置objMailItem=objOlApp.CreateItem(olMailItem)
Set objAttachments=objMailItem.Attachments
arrFilesToAttach(0)=Text1.Text
对于l=0到0
strTemp=ARRFILESTOTACH(l)
如果strTemp“”则
objaAttachments.添加arrfilestoattache(l)
如果结束
下一个
objMailItem.Display True
Set objOlApp=Nothing
Set objMailItem=Nothing
Set objAttachments=Nothing
端接头
看看是不是我的插件造成了问题。我创建了一个简单的outlook加载项,并在try…catch块内的启动事件中添加了一些文件IO代码。我禁用了以前的加载项并安装了此新的示例加载项

结果令人惊讶,样本addin也在制造问题。对于示例加载项,它将注册表中的LoadBehavior更改为2。try…catch块未捕获异常。我已经为Appdomain的unhandledException添加了一个处理程序,但也没有被解雇


请帮忙。。。提前感谢。

如果outlook将加载项的LoadBehavior更改为2,这通常意味着加载过程中该加载项出现故障,outlook将禁用该加载项

加载项在加载时可能出现故障的原因有很多种(缺少引用的DLL、权限等),所以这是一个问题

要确定您的加载项是否挂起发送进程,只需禁用您的加载项(例如,将loadbehavior设置为0)。实际上不需要为此创建一个示例加载项

如果禁用外接程序时一切正常,但启用外接程序时却失败,则外接程序很可能有问题

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

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

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


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

“我也倾向于使用大量日志记录”-我想补充的是,有时这是确定调用哪个命令的唯一方法。在使用调试器和分步处理时,我遇到了命令链被更改的情况。在这里,一些tailwatcher很好(我使用的是LobExpert)。当我启动outlook时,我的插件正常工作。Outlook不会禁用它。当Outlook未在计算机上运行且我直接运行VB6代码时,就会出现此问题。启动事件本身未触发。