从 Office 2013 降级到 Office 2010 后,调用 Word 方法 Application.ComAddins 崩溃
Calling Word method Application.ComAddins crashes after downgrading from Office 2013 to Office 2010
我们的一些客户从 Office 2013 降级到 Office 2010。
这样做之后,如果您调用应用程序 属性 ComAddins,您会得到以下异常:
System.Runtime.InteropServices.COMException (0x8002801D): Library not registered. (Excepción de HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))
at Microsoft.Office.Interop.Word.ApplicationClass.get_COMAddIns()
at our own code
我们已尝试重新安装 Office 并进行了不同的清理,但均无济于事。知道注册表出了什么问题或如何修复它吗?
我们能否找到错误的注册并以某种方式修复它?
编辑:
这是一个在普通机器上运行但在降级机器上失败的示例:
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.Word;
namespace WordCorruptionTester
{
public static class Program
{
public static void Main()
{
Application application = null;
try
{
application = new Application();
COMAddIns addins = application.COMAddIns;
File.WriteAllText(@"c:\appAgn\office.txt", "OK");
Marshal.ReleaseComObject(addins);
Marshal.ReleaseComObject(application);
}
catch
{
File.WriteAllText(@"c:\appAgn\office.txt", "CORRUPTO");
if (application != null)
{
Marshal.ReleaseComObject(application);
}
}
}
}
}
续篇:
根据一些真正有效的评论,这是收集到的新信息:
@Dirk Vollmar:执行 winword /r 没有区别。
@TnTinMn:长话短说。按照您的建议,我没有发现任何问题,但我
看到界面指向的文件是 winword.olb 所以我重新注册了 "C:\Windows\Microsoft.NET\Framework\v4.0.30319>regtlibv12.exe "C:\Program Files (x86)\Microsoft Office\Office14\MSWORD.OLB""
因为错误是关于 Library not registered 。执行此操作后,错误消息更改为:
System.Runtime.InteropServices.COMException (0x80040155): Interface not registered (Excepción de HRESULT: 0x80040155)
at Microsoft.Office.Interop.Word.ApplicationClass.get_COMAddIns()
at our own code
进一步调查我反编译了我们自己的调用 get_COMAddIns 的代码,我发现嵌入了名为“000C0339-0000-0000-C000-000000000046”的接口 ID
我终于通过这种方式解决了这个问题(看起来像是从 Office 2013 降级到 Office 2010 时影响办公自动化的 MS Office 安装程序错误):
"C:\Windows\Microsoft.NET\Framework\v4.0.30319>regtlibv12.exe "C:\Program Files (x86)\Microsoft Office\Office14\MSWORD.OLB""
"C:\Windows\Microsoft.NET\Framework\v4.0.30319>regtlibv12.exe "C:\Program Files (x86)\Common Files\Microsoft Shared\Office14\MSO.DLL""
这次注册使系统再次工作。
我们的一些客户从 Office 2013 降级到 Office 2010。
这样做之后,如果您调用应用程序 属性 ComAddins,您会得到以下异常:
System.Runtime.InteropServices.COMException (0x8002801D): Library not registered. (Excepción de HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))
at Microsoft.Office.Interop.Word.ApplicationClass.get_COMAddIns()
at our own code
我们已尝试重新安装 Office 并进行了不同的清理,但均无济于事。知道注册表出了什么问题或如何修复它吗?
我们能否找到错误的注册并以某种方式修复它?
编辑:
这是一个在普通机器上运行但在降级机器上失败的示例:
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.Word;
namespace WordCorruptionTester
{
public static class Program
{
public static void Main()
{
Application application = null;
try
{
application = new Application();
COMAddIns addins = application.COMAddIns;
File.WriteAllText(@"c:\appAgn\office.txt", "OK");
Marshal.ReleaseComObject(addins);
Marshal.ReleaseComObject(application);
}
catch
{
File.WriteAllText(@"c:\appAgn\office.txt", "CORRUPTO");
if (application != null)
{
Marshal.ReleaseComObject(application);
}
}
}
}
}
续篇:
根据一些真正有效的评论,这是收集到的新信息:
@Dirk Vollmar:执行 winword /r 没有区别。
@TnTinMn:长话短说。按照您的建议,我没有发现任何问题,但我
看到界面指向的文件是 winword.olb 所以我重新注册了 "C:\Windows\Microsoft.NET\Framework\v4.0.30319>regtlibv12.exe "C:\Program Files (x86)\Microsoft Office\Office14\MSWORD.OLB""
因为错误是关于 Library not registered 。执行此操作后,错误消息更改为:
System.Runtime.InteropServices.COMException (0x80040155): Interface not registered (Excepción de HRESULT: 0x80040155)
at Microsoft.Office.Interop.Word.ApplicationClass.get_COMAddIns()
at our own code
进一步调查我反编译了我们自己的调用 get_COMAddIns 的代码,我发现嵌入了名为“000C0339-0000-0000-C000-000000000046”的接口 ID
我终于通过这种方式解决了这个问题(看起来像是从 Office 2013 降级到 Office 2010 时影响办公自动化的 MS Office 安装程序错误):
"C:\Windows\Microsoft.NET\Framework\v4.0.30319>regtlibv12.exe "C:\Program Files (x86)\Microsoft Office\Office14\MSWORD.OLB""
"C:\Windows\Microsoft.NET\Framework\v4.0.30319>regtlibv12.exe "C:\Program Files (x86)\Common Files\Microsoft Shared\Office14\MSO.DLL""
这次注册使系统再次工作。