【发布时间】:2010-10-19 13:25:53
【问题描述】:
MS Office 程序会保留一份在之前打开时导致错误的已禁用文件的列表。用户可以通过程序菜单访问列表并选择要重新启用的文档来从该列表中删除文档。 (http://support.microsoft.com/kb/286017)
问题是:如何在不与 gui 交互的情况下以编程方式完成对文档的重新启用?
【问题讨论】:
标签: excel ms-word ms-office powerpoint
MS Office 程序会保留一份在之前打开时导致错误的已禁用文件的列表。用户可以通过程序菜单访问列表并选择要重新启用的文档来从该列表中删除文档。 (http://support.microsoft.com/kb/286017)
问题是:如何在不与 gui 交互的情况下以编程方式完成对文档的重新启用?
【问题讨论】:
标签: excel ms-word ms-office powerpoint
关于 MS Office XP (2002) MSWord,禁用文档的列表以随机命名的二进制值形式保存在键下: [HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Resiliency\DisabledItems]
因此,为每个用户删除“DisabledItems”键下的值可能会奏效。
还有别的吗?我还不知道。
【讨论】:
codeproject 上有一篇关于 Office 如何处理 COMAddins 的好文章。普通插件的处理方式相同,系统到目前为止保持不变(直到 Office 2013)。 据我所知。随机命名的值包含由空字符串分隔的 unicode 字符的字节数组。 我找不到空分隔值数组中的所有条目。但是索引 (3) 包含 ADDIn 的文件名,索引 (4) 包含 ADDIn 的描述(如果可用)。
因此,正如 Luie 在 2009 年写的那样,在删除注册表项之前,应该读取这些值并要求用户重新安装插件。
【讨论】:
合并以前的答案并在此处进行阐述。
Office 产品将禁用的项目存储在注册表中名为 HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\<product>\Resiliency\DisabledItems 的键下。例如,Excel 2010 的禁用列表位于HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Resiliency\DisabledItems 下。
每个禁用的项目都存储为REG_BINARY 类型的随机命名键。字节数组的格式为:
【讨论】:
这是我拼凑起来的一个 Powershell 脚本,以解决我在 Win7 上使用 MS-Access 2013 时遇到的类似问题
#RemoveOfficeDisabledItem.ps1
#command line:
# powershell -executionpolicy unrestricted -file ".\RemoveOfficeDisabledItem.ps1"
#Update these variables to suit your situation
$OfficeVersion="15.0"
$OfficeApp="Access"
$FileName="My Blocked File.mdb"
#Converts the File Name string to UTF16 Hex
$FileName_UniHex=""
[System.Text.Encoding]::ASCII.GetBytes($FileName.ToLower()) | %{$FileName_UniHex+="{0:X2}00" -f $_}
#Tests to see if the Disabled items registry key exists
$RegKey=(gi "HKCU:\Software\Microsoft\Office\${OfficeVersion}\${OfficeApp}\Resiliency\DisabledItems\")
if($RegKey -eq $NULL){exit}
#Cycles through all the properties and deletes it if it contains the file name.
foreach ($prop in $RegKey.Property) {
$Val=""
($RegKey|gp).$prop | %{$Val+="{0:X2}" -f $_}
if($Val.Contains($FileName_UniHex)){$RegKey|Remove-ItemProperty -name $prop}
}
【讨论】:
BAT 脚本可重新启用 Excel 2016 中的所有“禁用项目”。
禁用项在 Excel->文件->选项->插件->管理->禁用项中找到。
:: Deletes all values under the key.
REG DELETE HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Resiliency\DisabledItems /va /f
参数仅供参考:
/va 删除该键下的所有值。
/f 不提示强制删除。
PS。我有一堆使用任务计划程序运行宏的工作簿。 Excel 会随机添加崩溃到禁用项目列表的工作簿。所以每天运行这个 BAT 脚本就可以解决它。
【讨论】: