![](/img/trans.png)
[英]issue regarding open word file and read only mode using c# & MS-word interop
[英]Programmatically configuring MS-Word's Trust Center settings using C#
我开发了一个简单的C#Winforms应用程序,它通过COM自动化加载MS-Word 2007文档。
这一切都非常简单直接,但是根据我需要以编程方式启用或禁用宏以及ActiveX控件的文档。
可能有一种方法可以将其存储在注册表中,但我希望逐个实例地控制这些设置,因为一次可能会运行多个并发请求。
所以我的问题是“ 如何使用COM自动化配置信任中心设置 ”。
我用谷歌搜索了几个小时,但我能找到的只是Application.AutomationSecurity属性,但这只接受以下值:
但是,Word 2007信任中心公开了以下设置:
宏设置:
(来源: visguy.com )
ActiveX控件(单独配置,我还没有找到任何方法来控制这些,请注意根据屏幕截图这些设置在所有应用程序之间共享)
我已经尝试了在更改这些设置时记录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
我知道这个帖子已经很老了,但我今天必须弄清楚,所以经过快速研究后我找到了信任中心设置的这个注册表:
这适用于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.