目录
这种情况常见于,excel在执行大量操作时(由插件触发的进程),程序进入未响应状态(用户看起来就是excel卡死的样样子),用户没有耐心等待下去,使用了任务管理器,强行终止进程。等重新打开excel程序之后(一般是直接打开一份excel文件,而不是打开程序里的excel主程序),excel 自制COM插件,在excel消失。
这个时候,插件基本已经进入禁用名单了(这种情况网上手动解决方法很多,这里不再赘述)。
将其从加载项-禁用的地方,放出来后,重新手动勾选COM插件前面那个勾,大概率可以复活。
但是还有一种情况,复活后,关闭excel,重新再打开excel,插件又消失了,就是插件前面那个勾的状态保持不住。
我们分析一下插件消失的原因:
1、被关进监牢(禁用项):
在强关的时候插件的进程在运行,并且在关闭的时候抛出了错误,并且被windows的安全机制检测到了,认为是因为插件导致的excel崩溃异常,然后就把该插件抓进监牢。
2、被放出来后,没有自动load
即使手动勾中 ,也没有保留加载行为
针对上面表现出来的2个问题,进行针对性的解决 :
1、不被关进去,是不是就没有后续的一系列的问题了,各自安好
要么不被检测到——暂不清楚,增加签名是否能不被抓住,或者有其他方法,如果有试过的可以评论一下。
要么有个白名单类似的东西,不让他进去。从office2013开始,注册列表项,就增加了类似的东西,增强管理员对office add-in的控制(group policy)
Support for keeping add-ins enabled
该篇文章的例子用的是outlook的,excel和word同理,将下列注册列表项的Outlook改为对应的Excel或者Word就行
Office 2013:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\15.0\Outlook\Resiliency\AddinList
Office 2016/2019/365:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\16.0\Outlook\Resiliency\AddinList
该属性可以控制插件一直enabled,disabled或者configurable by the user
键为String类型 的 ProgID of the add-in
值为0、1、2 对应的意思如下
Specify the value as follows:
0 = always disabled (blocked)
1 = always enabled
2 = configurable by the user and not blocked by the Block all unmanaged add-ins policy setting when enabled.
上面是Policy下的Resiliency项(群体项),单个程序下,也有Resiliency配置
可以有个DoNotDisableAddinList的子项,意思是,不要禁用的插件列表,在这个子项下,将插件的值配置进去
HKEY_CURRENT_USER\Software\Microsoft\Office\x.0\Outlook\Resiliency\DoNotDisableAddinList
键 DWORD类型 值ProgID of the add-in
可配置的值为下列
A Hex value between 1 and A indicating the reason the add-in was originally disabled:
0x00000001 Boot load (LoadBehavior = 3)
0x00000002 Demand load (LoadBehavior = 9)
0x00000003 Crash
0x00000004 Handling FolderSwitch event
0x00000005 Handling BeforeFolderSwitch event
0x00000006 Item Open
0x00000007 Iteration Count
0x00000008 Shutdown
0x00000009 Crash, but not disabled because add-in is in the allow list
0x0000000A Crash, but not disabled because user selected no in disable dialog
NOTE: The x.0 placeholder represents the version of Office (16.0 = Office 2016/2019/365, 15.0 = Office 2013).
如果增加了上面2项注册列表的值,还是无法避免被抓到禁止项目里去(实际上是加载项进入了
Resiliency\DisabledItems 子项目下),可以使用bat删除DisabledItems下的值(没有办法的办法)
@echo off
setlocal
:: 删除DisabledItems下的所有值
reg delete HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Resiliency\DisabledItems /f
reg delete HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Word\Resiliency\DisabledItems /f
pause
endlocal
2、保留住自动加载的行为
勾了加载项,关闭excel后,加载项又变成没勾的状态(没有禁用),这是初始加载行为出了问题
需要去对应的插件注册列表项下,配置LoadBehavior的值
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Word\Addins\插件名字
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Excel\Addins\插件名字
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Outlook\Addins\插件名字
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\PowerPoint\Addins\插件名字
键名 LoadBehavior 类型 REG_DWORD
值从下列文档中按需选取
PS:配置受信任的位置注册列表项
参考文章:
Changing the Load Behavior of the ndOffice Add-ins
Enabling NetDocuments Add-ins in Office
Support for keeping add-ins enabled
Add-ins are user re-enabled after being disabled by Office programs
Can't create a Teams Meeting in Outlook because the Teams Meeting add-in has become disabled