【发布时间】:2016-02-27 11:09:15
【问题描述】:
我正在使用以下方式获取MSWord的运行实例。
MSWord.Window wordWin = null;
uint OBJID_NATIVEOM = 0xFFFFFFF0;
Guid IID_IDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
Guid iid = IID_IDispatch;
Object accObject = null;
int hr = OleAcc.AccessibleObjectFromWindow(msWordHndl, OBJID_NATIVEOM, ref iid, ref accObject);
wordWin = accObject as MSWord.Window
if(wordWin != null) // <----(1)
{
// do something.
}
这里的 msWordHndl 是 MS Word 句柄的有效运行实例。
上面的代码 (1) 在任何地方都可以正常工作,除了在我们的一些客户机器上。
我们需要做什么来确定为什么 msWordHndl 没有被识别为 MSWord COM 对象?即(1)总是失败。我们的机器/环境不会发生同样的情况。
以下已在客户机器上验证。
- Office 2010 plus 已安装
- 已安装主互操作组件 (PIA)。
- 已验证在安装 MS Office 时包含 .NET 可编程性支持。
更新:遇到Can Microsoft.office.interop.word.dll work without installing office?中提到的相同问题
但就我而言,Office 安装在客户计算机上。
我确实验证了 Microsoft.Office.Interop.Word.dll 位于 c:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word\14.0.0...\ 我看到的一个小区别是 DLL 名称以“Policy.12.0”为前缀。为了确保这会导致任何问题,我检查了另一台 MSWord 访问正常但该计算机也具有与 DLL 相同的前缀的客户计算机。
【问题讨论】:
标签: c# com ms-word automation office-interop