11

我开发了一个简单的 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

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

4

4 回答 4

8

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

我已经对其进行了测试,可以确认映射如下:

宏设置:

  • 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 网站的相关部分留下了评论

于 2009-10-21T14:58:45.193 回答
3

我知道这个线程很老了,但我今天必须弄清楚,所以经过快速研究后,我找到了Trust Center Settings的注册表:

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

在此处输入图像描述

或在文本中:

注册表位置:

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Security

宏设置:

名称:VBA警告

资料

在不通知的情况下禁用所有宏 - 4

禁用所有带有通知的宏 - 2

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

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

开发者宏设置:

名称:AccessVBOM

资料

未选中 - 0

已检查 - 1

于 2014-02-04T16:13:21.150 回答
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 上引入了此选项。

于 2014-04-03T19:03:28.590 回答
0

对于 Office 2010 中 ActiveX 控件的设置

在没有安全模式的情况下使用 DisbaleActiveX 你只需要...

"HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Security" /v UFIControls /t REG_DWORD /D 1 /F
于 2014-02-22T22:24:15.640 回答