【发布时间】:2017-12-28 05:07:37
【问题描述】:
我有一个在客户端(9.0 社会版)上运行的预定 LotusScript 代理。其目的之一是打开 Word 文档并将其保存为 PDF,但这并不重要。下面是相关代码sn-p
Declarations
Dim wrdApp as Variant
Sub Initialize
[Getting the usual Notes Session, Database, View values]
Set wrdApp = createObject("Word.Application")
wrdApp.visible = True
starthere:
'we check to see if there is anything that has been deferred
Set v = db.GetView("RIT")
strStatus = "Success"
Set doc = v.Getfirstdocument()
If (doc Is Nothing) Then Exit Sub
[Snip]
End Sub
Sub Terminate
wrdApp.visible = True
Dim quitCode As Variant
quitCode = 0
Call wrdApp.quit(quitCode)
Print "Quit called, waiting 3 seconds"
' Wait a couple seconds
Sleep(3)
Print "Done waiting, setting wrdApp to Nothing"
Set wrdApp=Nothing
Print "Exiting agent"
End Sub
我遇到的问题是,自从我们升级到 Office 2016 后,有时代理永远不会终止。在日志中,我看到“等待完成,将 wrdApp 设置为 Nothing”,但没有看到“正在退出代理”。我将打开一个 Word 窗口(当然没有文档),当我查看任务管理器时,我看到一个 WINWORD.EXE 以 0% 的 CPU 和 2 或 3 秒的 CPU 时间运行。当然,只是为了增加阴谋,这也不是每次都会发生。由于代理永远不会结束,所有其他计划代理都会被阻止,直到我杀死僵尸 Word 实例。我已经尝试了我能找到的所有建议(你会注意到我使 Word 可见并使用 Variant 作为退出的参数,我什至出于绝望而投入了 sleep(3) ),但没有任何区别.我们在使用 Office 2010 时从未遇到过这个问题(即使代理代码更加草率)。此外,无论我是否实际打开 Word 文档,都可能发生此问题。有解决办法吗?还是回到 O2010 是唯一的选择?
【问题讨论】:
-
只是一个测试:你能把你所有的代码都放在 Initialize Sub 中吗?我在代码结束之前终止了 Terminate Sub 有一些不好的经历......
-
这是我重构了一下的代码。它用于在从 Initialize 调用的子例程中设置和拆除 Word 实例。当我开始遇到问题时,我以这种方式重写了它(这意味着它与 Terminate 无关。)虽然重构没有帮助(或伤害)问题,但我喜欢它以这种方式更好地流动。
标签: ms-office lotusscript