Excel更改加载项的loadbehaviour

时间:2018-04-09 09:54:14

标签: excel vb.net vsto

我创建了一个Excel VSTO加载项,用户可以安装该加载项。但是,使用该加载项后,下次启动Excel时,不会再自动加载加载项。

用户可以通过启用加载项来解决此问题,但每次都会发生这种情况,我想停止它。

在te注册表中,关键是: HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\TiaGenerator\LoadBehavior设置为2,默认情况下处于非活动状态。我可以将其更改回3(启动时加载),但在运行Excel后,它会更改回2.。

编辑: 正如@Cindy Meister所说:Excel应该在启动后将加载行为更改为3,因此必定存在问题。经过一些搜索,结果发现问题出在一个名为ErrorWriter的自制类的构造函数中。这个问题似乎在这个问题中:

Public Class Errorwriter
    Inherits IO.StreamWriter

Sub New()
    MyBase.New("C:\tmp\newLog.txt")

End Sub
End Class

有谁知道为什么这会导致Excel更改加载行为?

1 个答案:

答案 0 :(得分:0)

感谢@Cindy Meister的评论,我能够深入挖掘一下,这就是我发现的:

如果在启动期间遇到未处理的异常,Excel会更改加载项的加载行为。

在启动例程中,我创建了一个' ErrorWriter'的新实例。 object,继承自' StreamWriter',并使用对此文件的引用。

如果加载了Excel,则会锁定此文件。使用此加载项的某些功能后,将在后台启动第二个Excel实例,该实例也会尝试使用此文件。这会导致未处理的异常,但由于此第二个实例不可见,因此永远不会向用户(也不是程序员)显示此错误。

因为在Excel的第二个实例中不需要ErrorWriter,所以从未明白错误会以任何方式发生。

这会导致Excel更改其加载行为。

通过将违规代码移动到单独的函数来修复它,该函数仅在调用加载函数时调用。