使用C#以编程方式配置MS-Word的信任中心设置

时间:2009-10-21 12:32:01

标签: c# automation ms-word ms-office office-2007

我开发了一个简单的C#Winforms应用程序,它通过COM自动化加载MS-Word 2007文档。

这一切都非常简单直接,但是根据我需要以编程方式启用或禁用宏以及ActiveX控件的文档。

可能有一种方法可以将其存储在注册表中,但我希望逐个实例地控制这些设置,因为一次可能会运行多个并发请求。

所以我的问题是'如何使用COM自动化配置信任中心设置'。

我用Google搜索了几个小时,但我能找到的只是Application.AutomationSecurity属性,但这只接受以下值:

  • MsoAutomationSecurity.msoAutomationSecurityLow
  • MsoAutomationSecurity.msoAutomationSecurityForceDisable
  • MsoAutomationSecurity.msoAutomationSecurityByUI

Word 2007信任中心会公开以下设置:

宏设置:

  • 禁用所有宏而不发出通知(匹配msoAutomationSecurityForceDisable)
  • 禁用所有带通知的宏(我不需要这个)
  • 禁用除数字签名宏(无等效项)之外的所有宏
  • 启用所有宏(匹配msoAutomationSecurityLow)

alt text
(来源:visguy.com


ActiveX控件(单独配置,我还没有找到任何方法来控制这些,请注意根据截图这些设置在所有应用程序之间共享)

  • 禁用所有控件而不发出通知
  • 在启用UFI控件之前提示我....
  • 在启用具有最小限制的所有控件之前提示我
  • 无限制启用所有控件

alt text

我尝试了在更改这些设置时记录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

仍然热衷于解决宏设置问题

4 个答案:

答案 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

我在relevant section of the MSDN website

中留下了评论

答案 1 :(得分:3)

我知道这个帖子已经很老了,但今天我不得不弄明白,所以经过快速研究后我找到了信任中心设置的注册表:

这适用于Word版本2010(可能是2007年,但是使用12.0而不是14.0)

enter image description here

或在文字中:

注册表位置:

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中引入了此选项。