代码之家  ›  专栏  ›  技术社区  ›  the_drow

ComException(0x800A13E9)-Word Interop服务

  •  8
  • the_drow  · 技术社区  · 14 年前

    我得到这个stacktrace:

    System.Runtime.InteropServices.COMException (0x800A13E9): Word ðú÷ì ááòéä.
       at Microsoft.Office.Interop.Word.Documents.Add(Object& Template, Object& NewTemplate, Object& DocumentType, Object& Visible)
       at Crm.DocumentGeneration.Printing.DocumentsPrinter.MergeDocuments(ApplicationClass& wordApp, IEnumerable`1 printDataItems, String tempDirectory, String template) in C:\Work\Danel.Nursing\Crm.DocumentGeneration.Printing\DocumentsPrinter.cs:line 249
    

    在谷歌搜索一点后,似乎comexception(0x800a13e9)内存不足异常,但服务器上有足够的内存启动 太空船 8192宇宙飞船。
    以下是函数调用:

    Document document = wordApp.Documents.Add(ref defaultTemplate, ref missing, ref missing, ref missing);
    

    我检查了defaulttemplate中的任何内容都不是空的或无效的。

    4 回复  |  直到 5 年前
        1
  •  8
  •   the_drow    14 年前

    以下是我找到的解决方案:

    1. 将名为desktop的文件夹放在c:\windows\sysw64\config\systemprofile上(是的,我知道)。WTF?)
    2. 打开regedit,转到hkey_local_machine\software\classes\appid,然后编辑guid以46结尾的两个输入。删除他们拥有的每个键,并添加一个名为runas的新键,该键的值为interactive user。

    之后,开始祈祷。 如果您通过终端服务器访问,它将不起作用。这对我来说是个问题,呵呵。

    编辑: 终端服务器的问题是,只允许管理员引发COM对象,因此您必须对管理员进行模拟。

        2
  •  3
  •   Dennis G    14 年前

    对不起,关于那个1兆参考…我只能跳到那个上面。

    自动化Office应用程序时,请确保在服务器上使用具有Word COM+对象权限的本地帐户,以及要处理的文档。
    有几个与您的问题相关的帖子指向账户问题:

        3
  •  0
  •   Andrew Faerber    5 年前

    更新 Microsoft已通过更新修复了此问题。
    对于所有地区格式有问题的人,请将您的办公室更新为 1902版(内部版本11328.20158) .
    您可能需要更改为每月更新频道才能获得它。

    对于Windows 10 1809用户,问题可能来自Windows区域格式设置。 当你使用像“英语(瑞士)”这样的特殊区域格式时,似乎有一个问题。 如果你把它改成“英语(英国)”,一切都会好起来的。 我找到的关于这个的信息 here

    希望这能帮助那些仍然面临这个问题的人。

        4
  •  -2
  •   Mehmet Aras    14 年前

    根据知识库文章,Microsoft不支持您的方案 Considerations for server-side Automation of Office 哪个国家说

    Microsoft目前不建议也不支持从任何无人值守、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动化Microsoft Office应用程序,因为在此环境中运行Office时,Office可能会出现不稳定的行为和/或死锁。

    然后,本文将介绍服务器端自动化的替代方案,其中之一是开放式XML。如果您还没有阅读过这篇文章,您可能会想看看。