使用C#编程配置MS-Word的信任中心设置
我开发了一个简单的C#Winforms应用程序,它通过COM自动化加载MS-Word 2007文档。使用C#编程配置MS-Word的信任中心设置
这是非常简单和直接的,但取决于我需要编程的文档启用或禁用宏以及ActiveX控件。
可能有一种方法可以将这些信息存储在注册表中,但我希望通过实例来控制实例上的这些设置,因为一次可能会运行多个并发请求。
所以我的问题是'如何使用COM自动化配置信任中心设置'。
我用Google搜索了几个小时,但我已经能够找到的是Application.AutomationSecurity属性,但这种只接受以下值:
- MsoAutomationSecurity.msoAutomationSecurityLow
- MsoAutomationSecurity.msoAutomationSecurityForceDisable
- MsoAutomationSecurity.msoAutomationSecurityByUI
但是,Word 2007信任中心公开了以下设置:
宏设置:
- 禁用所有宏,并且不通知(匹配msoAutomationSecurityForceDisable)
- 禁用与通知所有宏(我不需要这个)
- 禁用无数字的所有宏(没有等效)
- 启用所有宏(匹配msoAutomationSecurityLow)
alt text http://www.visguy.com/wp-content/uploads/2007/05/v2007-security-settings.png
ActiveX控件(单独配置,我还没有发现任何的方法来控制这些,需要注意的是,根据这些设置的所有应用程序之间共享的屏幕截图)
- 禁用所有控件,而无需通知
- 在启用UFI控件前提示我。
- 在启用所有带有最小限制的控件之前提示我提示
- 启用所有控件不受限制
我试图同时改变这些设置录制MS-Word宏的老把戏,但没有这些步骤被记录。
更新: 我在注册表中找到了ActiveX控件设置的以下条目。看起来像ActiveX设置确实是全球性的,不能为单个MS-Word实例指定,除非有人证明我错了。
的ActiveX残疾人
[HKEY_CURRENT_USER \软件\微软\办公室\ COMMON \安全] “DisableAllActiveX”= DWORD:00000001 “UFIControls”= DWORD:00000002
的ActiveX启用与安全模式
[HKEY_CURRENT_USER \软件\微软\办公室\ COMMON \安全] “DisableAllActiveX”= DWORD:00000000 “UFIControls”= DWORD:00000002
的ActiveX启用无安全模式
[HKEY_CURRENT_USER \软件\微软\办公室\ COMMON \安全] “DisableAllActiveX”= DWORD:00000000 “UFIControls”= DWORD:00000001
仍然热衷于解决宏观设置问题
看起来我要回答我自己的问题。
我测试,可以确认上述的映射如下:
宏设置:
msoAutomationSecurityForceDisable =禁止所有宏而不 通知
msoAutomationSecurityByUI =禁止所有宏数字除外 签名宏
msoAutomationSecurityLow =启用所有宏
据我所知,全球的ActiveX设置只能通过直接编辑注册表来配置
的ActiveX残疾人
[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security]“DisableAllActiveX”= dword:00000001“UFIControls”= dword:00000002
的ActiveX启用与安全模式
[HKEY_CURRENT_USER \软件\微软\办公室\ COMMON \安全] “DisableAllActiveX”= DWORD:00000000 “UFIControls”= DWORD:00000002
的ActiveX启用无安全模式
[HKEY_CURRENT_USER \软件\微软\办公室\ COMMON \安全] “DisableAllActiveX”= DWORD:00000000 “UFIControls”= DWORD:00000001
我已经留在评论
我知道这个线程是很老了,但是我今天必须弄清楚这样一个快速研究后,我发现这个注册表中的信任中心设置:
这适用于2010的Word版本(大概2007年,但与12.0,而不是14.0)
或文本:
注册LOCAT ion:
HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14。0 \字\安全
宏设置:
名称:VBAWarnings
数据:
禁用所有宏,并且不通知 -
禁用所有通知宏 -
禁用无数字签署的所有宏 -
启用所有宏(...) -
开发商宏设置:
名称:AccessVBOM
数据:
未选中 -
经过 -
有关设置对ActiveX在Office 2010
到DisbaleActiveX没有安全模式下,你只需要控制.. 。
"HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Security" /v UFIControls /t REG_DWORD /D 1 /F
我花了几天的时间尝试相同的事情,最终发现了一种非常简单的方法,即打开包含宏的.xls文件,而不会破坏注册表或Excel的信任设置。在C#中:
Application aXL = new Application();
aXL.FileValidation =
Microsoft.Office.Core.MsoFileValidationMode.msoFileValidationSkip;
try {
Workbook aBook = aXL.Workbooks.Open("K:\\Work\\ExcelTest\\BrokenMacro.xls"
, 0
, true
, Type.Missing
, Type.Missing
, Type.Missing
, true
, Type.Missing
, Type.Missing
, false
, false
, Type.Missing
, false
, false
, Type.Missing
/*,false*/);
}
catch (Exception e) {
Console.WriteLine(e);
}
有关详细信息,请参见MSDN。
我的Excel信任中心设置全部设置为默认值 - “禁用所有包含警告的宏”和“不信任对VBA对象模型的访问权限,如果没有msoFileValidationSkip选项,则抛出异常,使用msoFileValidationSkip选项文件打开的细。
在我看来,这是要走的路,因为它允许一个程序来打开与宏的文件,但不打开Excel应用程序病毒缠身的电子表格。
注意我正在运行Office 2010.我不知道在哪个版本的Office中引入了此选项。