【问题标题】:Creating Word OLE Client from a Windows Scheduled Task causes ntdll application error从 Windows 计划任务创建 Word OLE 客户端会导致 ntdll 应用程序错误
【发布时间】:2021-11-09 10:31:21
【问题描述】:

我们的正常工作流程是使用 Windows 计划任务来:

  1. 将文件从 rtf 批量转换为 pdf
  2. 操作 pdf 以添加条形码
  3. 聚合成一个 pdf
  4. 然后发送打印

这在 Windows Server 2008 上运行良好,但自从我们升级到 Windows Server 2019(生命周期结束等)后,我们遇到了一大堆问题。我们现在遇到了第一个障碍——甚至是实例化 Word OLE 客户端。错误不一致 - 前一天进程会成功完成,下一天会立即失败。

我们的任务触发了一个 Dyalog APL 工作区,要执行的代码就位于该工作区。出于调试目的,我设置了一个简化版本,它执行以下操作:

 tries←0                                                              ⍝ Initialise the try counter
 Log'Attempting to create Word instance'                              ⍝
 :Repeat                                                              ⍝ Keep trying to...
     Word←⎕NEW'OleClient'(⊂'ClassName' 'Word.Application')           ⍝     Create the Word Client instance
     Word.Visible←1                                                   ⍝     making the application visible
     tries+←1                                                         ⍝     and incrementing the try counter each time
     Log'Try: ',⍕tries                                               ⍝
 :Until #.Word.PropList∊⍨⊂'Documents'                                ⍝ Until it has seemingly created successfully
 :OrIf tries≥maxTries_create                                          ⍝ ... or the tries have exceeded the maximum (currently 5)
                                                                      ⍝
 'doc open'delayAndLog dl_open                                        ⍝ With an optional external delay...
 myWordDoc←Word.Documents.Open⊂docPath                                ⍝ open the specified test doc
                                                                      ⍝
 'doc close'delayAndLog dl_close                                      ⍝ With an optional external delay...
 myWordDoc.Close 0                                                    ⍝ close the doc (not saving)
                                                                      ⍝
 'application quit'delayAndLog dl_quit                                ⍝ With an optional external delay...
 Word.Application.Quit 0                                              ⍝ quit the word client

各种延迟保存在外部配置文件中。我没有包括读取这个配置文件,因为基本上这里显示的是实质内容。 注意:我重试创建实例,因为有时我发现它只使用准系统方法进行实例化。延迟或重试似乎可以解决此问题。

这段代码在我的非生产服务器(甚至有时在生产中)中运行良好。今天,我通过IDE运行它时可以正常运行,但是当作为Windows计划任务运行时,它会在打开文档时报告一个DOMAIN ERROR。

我的观察是它短暂地创建了WINWORD.exe,即您可以在任务管理器中看到它,状态变为“暂停”,然后它消失了。在事件查看器中,我们看到以下内容:

Event Viewer - ntdll application fault (id: 1000)

到目前为止我尝试过的事情

  1. 重新启动服务器(是的,你在开玩笑,但我们应该首先尝试将其关闭再打开)
  2. 修复办公室
  3. 重新安装 Office
  4. 尝试将任务配置为以其他用户身份运行(我自己,具有本地管理员权限)
  5. 尝试将任务配置为在不同的服务器上运行。
  6. 尝试将任务配置为以更高的优先级运行。
  7. 使 Word 实例可见,以查看是否有任何错误弹出窗口。
  8. 构建任务的简化版本(见上文),以确保不仅仅是主要任务的整体复杂性导致混乱。
  9. 根据 Microsoft 的建议禁用“自动墨迹书写”
  10. 已捕获错误的 procmon 日志(等待 Microsoft 审核)

当前安装的版本:

  • Word:Microsoft Word 2019 MSO (16.0.10374.20040) 64 位
  • Dyalog APL:16.0.35960.0 32 位 Unicode
  • Windows Server 2019 标准版 1809。操作系统内部版本 17763.1697。

非常感谢任何帮助,因为我觉得我正在处理薛定谔的 OLE 客户端。提前致谢。

【问题讨论】:

    标签: ms-office word ole apl dyalog


    【解决方案1】:
    1. 这是 Word 中的崩溃。

    c:\Users\AppData\Local\Temp\ 或 c:\Users\AppData\Local\CrashDumps 中可能有故障转储文件。

    在您的公司,如果您有任何可以使用 Visual Studio 或 Windbg 的 C 开发人员,他们可以打开转储文件,看看它是否提供任何线索。

    如果没有,如果您将其发送给 Dyalog 支持,我可以快速查看。

    1. 这只是一个猜测...您是否尝试过增加桌面堆的大小?请看这篇博文: https://docs.microsoft.com/en-us/archive/blogs/ntdebugging/desktop-heap-overview

    问候,

    文斯

    【讨论】:

    • 嗨文斯。谢谢你的及时回复。我在 C:\dumps\ 中找到了一个转储文件(通过注册表跟踪此路径)。不幸的是,我们内部没有 C 开发人员。我能接受你的提议吗?该文件非常大(大约 500MB) - 我会看看是否可以通过我们的 OneDrive 与您共享。
    猜你喜欢
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多