Word的新文档计数在第一个winword.exe开始时开始,在最后一个winword.exe退出时结束。
我认为您所看到的很可能是系统上的另一个应用程序,该应用程序使用Word进行某种功能并保持winword.exe的运行。为此,通常使用Word进行拼写检查。我在答案的底部放置了一个示例,任何人都可以尝试,但是Microsoft在MSDN上的C#中有自己的示例(搜索“如何:使用COM Interop来检查Word的拼写(C#编程指南)”,正如我在我的声誉级别上已用尽所有链接)。
若要验证这实际上是导致问题的原因,下次您看到这种情况时,请关闭所有可见的Word窗口,弹出窗口以打开Windows任务管理器,选择“详细信息”选项卡,然后查看WINWORD.EXE是否正在运行。
由于这种对Word的访问是通过COM控件进行的,因此,此WINWORD.EXE的父进程将只是svchost.exe。据我所知,事后没有办法看到所谓的控件。
为了弄清楚这一点,假设正在运行WINWORD.EXE,请选择它并在“任务管理器”中选择“结束任务”。如果WINWORD.EXE重新启动并在几秒钟内再次开始运行,请参阅下面的选项二以了解如何记录日志,并希望迅速找出出现故障的应用程序。
假设WINWORD.EXE不再运行,解决这个问题的第一个选择就是让任务管理器运行,选择“选项”,“始终在顶部”,然后使“详细信息”选项卡处于启用状态,调整大小或在另一个屏幕上使用W命名。可见的过程。然后,您可以继续正常的工作流程,并在启动新应用程序或执行任务时,观察Word是否启动。
第二种选择是使用Microsoft TechNet网站上的Windows Sysinternals Process Monitor。如果您还没有该工具,则需要进行搜索,因为答案中没有任何链接。使用此工具,您可以捕获Word COM控件的启动时间和启动时间。下载,启动工具并接受EULA后,选择“过滤器”,“过滤器”(或仅按Ctrl-L键),将第一个字段切换为“路径”,然后将第二个字段切换为“包含”,粘贴{000209FF-0000-0000-C000-000000000046}
到文本字段并验证:说要制作一个包含过滤器。请注意,我们正在搜索的GUID是Word已知的GUID,但是您可以通过在注册表中搜索Word.Application来轻松地自行查找。屏幕截图:Process Monitor制作过滤器以搜索Word COM控件:
选择添加,然后单击确定。
Process Monitor现在将为空白。如果底部状态栏中的事件没有计数(当前过滤器不包括...),请确保选中了文件捕获事件。
如果您能够在任务管理器中结束WINWORD.EXE进程时触发WINWORD.EXE重新启动,请再次执行此操作以使WINWORD.EXE重新启动,并希望在出现错误时揭示进程。如果不是这种情况,您可能需要重新启动Windows并重新启动Process Monitor,以更好地捕获它。然后,执行常规任务,定期检查以查看Process Monitor是否捕获了任何东西。最终,“进程名称”字段应显示出罪魁祸首。如果不是很明显,请双击其中一项,然后选择“处理”选项卡以查看所有详细信息。
此外,如果最终需要长时间运行Process Monitor,则可能需要定期检查它,然后清除捕获(Ctrl-X)以防止页面文件内存用完(或者可以使用其他备份文件,但这是另一个主题)。
为了演示问题和Process Monitor的功能,您可以使用一些简单的VBScript模拟行为。为此,请打开记事本并粘贴以下内容:
Set Word = CreateObject("Word.Application")
Word.Visible = False
Set NewDocument = Word.Documents.Add()
然后将其另存为您的桌面test.vbs
。切换到桌面,然后双击test.vbs以执行VBScript。返回到进程监视器,您将能够看到进程名称为WScript.exe(默认的VBScript引擎),并且该名称就是启动Word的原因。屏幕截图:进程监视器显示了启动Word控件的WScript.exe:
您也可以从“开始”菜单启动Word,并且应该位于Document2。您需要在任务管理器中手动杀死WINWORD.EXE进程,否则它将继续运行。