我开发了一个简单的C#Winforms应用程序,它通过COM自动化加载MS-Word 2007文档。
这一切都非常简单直接,但是根据我需要以编程方式启用或禁用宏以及ActiveX控件的文档。
可能有一种方法可以将其存储在注册表中,但我希望逐个实例地控制这些设置,因为一次可能会运行多个并发请求。
所以我的问题是'如何使用COM自动化配置信任中心设置'。
我用Google搜索了几个小时,但我能找到的只是Application.AutomationSecurity属性,但这只接受以下值:
Word 2007信任中心会公开以下设置:
宏设置:
(来源:visguy.com)
ActiveX控件(单独配置,我还没有找到任何方法来控制这些,请注意根据截图这些设置在所有应用程序之间共享)
我尝试了在更改这些设置时记录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
仍然热衷于解决宏设置问题
答案 0 :(得分:7)
看起来我要回答我自己的问题。
我测试了它,可以确认映射如下:
宏设置:
msoAutomationSecurityForceDisable =禁用所有宏 通知
msoAutomationSecurityByUI =禁用除数字以外的所有宏 签名宏
msoAutomationSecurityLow =启用所有宏
据我所知,全局ActiveX设置只能通过直接编辑注册表来配置
ActiveX已禁用
[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security]“DisableAllActiveX”= dword:00000001“UFIControls”= dword:00000002
使用安全模式启用ActiveX
[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security]“DisableAllActiveX”= dword:00000000“UFIControls”= dword:00000002
在没有安全模式的情况下启用ActiveX
[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security]“DisableAllActiveX”= dword:00000000“UFIControls”= dword:00000001
中留下了评论答案 1 :(得分:3)
我知道这个帖子已经很老了,但今天我不得不弄明白,所以经过快速研究后我找到了信任中心设置的注册表:
这适用于Word版本2010(可能是2007年,但是使用12.0而不是14.0)
或在文字中:
注册表位置:
HKEY_CURRENT_USER \软件\微软\办公室\ 14.0 \字\安全
宏设置:
名称:VBAWarnings
数据:
禁用所有未通知的宏 - 4
禁用所有带通知的宏 - 2
禁用除数字签名宏之外的所有宏 - 3
启用所有宏(...) - 1
开发人员宏设置:
名称:AccessVBOM
数据:
未选中 - 0
已选中 - 1
答案 2 :(得分:0)
用于Office 2010中ActiveX控件的设置
到没有安全模式的DisbaleActiveX,你只需要......
"HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Security" /v UFIControls /t REG_DWORD /D 1 /F
答案 3 :(得分:0)
我花了几天时间尝试同样的事情,最后发现了一种打开包含宏的.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中引入了此选项。