我们的正常工作流程是使用 Windows 计划任务来:
- 将文件从 rtf 批量转换为 pdf
- 操作 pdf 以添加条形码
- 聚合成一个 pdf
- 然后发送打印
这在 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,即你可以在任务管理器中看到它,状态变为“暂停”,然后它消失了。在事件查看器中,我们看到以下内容:
到目前为止我尝试过的事情
- 重新启动服务器(是的,你在开玩笑,但我们应该始终尝试的第一件事就是将其关闭再打开)
- 修复办公室
- 重新安装办公室
- 尝试将任务配置为以其他用户身份运行(我自己,具有本地管理员权限)
- 尝试将任务配置为在不同的服务器上运行。
- 尝试将任务配置为以更高的优先级运行。
- 使 Word 实例可见,以查看是否有任何错误弹出窗口。
- 构建了任务的简化版本(见上文),以确保它不仅仅是主要任务的整体复杂性导致混乱。
- 根据微软的建议禁用“自动墨迹书写”
- 捕获错误的 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 客户端。提前致谢。