我创建了一个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更改加载行为?
答案 0 :(得分:0)
感谢@Cindy Meister的评论,我能够深入挖掘一下,这就是我发现的:
如果在启动期间遇到未处理的异常,Excel会更改加载项的加载行为。
在启动例程中,我创建了一个' ErrorWriter'的新实例。 object,继承自' StreamWriter',并使用对此文件的引用。
如果加载了Excel,则会锁定此文件。使用此加载项的某些功能后,将在后台启动第二个Excel实例,该实例也会尝试使用此文件。这会导致未处理的异常,但由于此第二个实例不可见,因此永远不会向用户(也不是程序员)显示此错误。
因为在Excel的第二个实例中不需要ErrorWriter,所以从未明白错误会以任何方式发生。
这会导致Excel更改其加载行为。
通过将违规代码移动到单独的函数来修复它,该函数仅在调用加载函数时调用。