繁体   English   中英

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

[英]Programmatically configuring MS-Word's Trust Center settings using C#

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

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

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

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

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

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

但是,Word 2007信任中心公开了以下设置:

宏设置:

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

替代文字
(来源: visguy.com


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

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

替代文字

我已经尝试了在更改这些设置时记录MS-Word宏的旧技巧,但没有记录这些步骤。

更新:我在注册表中找到了ActiveX控件设置的以下条目。 看起来ActiveX设置确实是全局的,除非有人证明我错了,否则不能为单个MS-Word实例指定。

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

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

看起来我要回答我自己的问题。

我测试了它,可以确认映射如下:

宏设置:

  • 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

在MSDN网站相关部分留下了评论

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

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

在此输入图像描述

或者在文字中:

注册地点:

HKEY_CURRENT_USER \\软件\\微软\\办公室\\ 14.0 \\字\\安全

宏设置:

名称 :VBAWarnings

数据

禁用所有宏而不通知 - 4

通过通知禁用所有宏 - 2

禁用除数字签名宏之外的所有宏 - 3

启用所有宏(...) - 1

开发者宏设置:

名称 :AccessVBOM

数据

未选中 - 0

检查 - 1

用于Office 2010中ActiveX控件的设置

没有安全模式的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中引入了此选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM