6

在我们公司,我们使用 Windows 应用程序来生成 Word (2010) 文档。有时文档没有正确关闭,所以另一个应用程序(是的,他们仍然称之为开发:)杀死运行超过 1 分钟的 word 进程。

这些被杀死的进程存储在 MS Word 的“文档恢复”中。在 Word 2010 中无法关闭这些文档恢复(选项/“保存自动恢复信息..”并不能解决问题)。当这些“文档恢复”充满文档(几十个或几百个)时,应用程序停止生成文档,我们需要手动清除前面。

我能够编写这个脚本来识别和杀死运行超过 10 秒的进程,但是有没有办法正确关闭它(不杀死它)?

我发现本教程使用 powershell 创建和退出 word 文档,但是如何将特定的 word 进程与这些 MS Office 方法连接以关闭文档?

Powershell 和 Word 教程

$timer = 10
$date = Get-Date

if (Get-Process winword*) {
    Get-Process winword | foreach { 
        if ((($date - $_.StartTime).Seconds) -gt $timer) {
            $procID = $_.id
            Write-Host -ForegroundColor Magenta "Process $procID is running longer than $timer seconds."
            Write-Host -ForegroundColor Green "Killing process $procID.."
            Stop-Process $procID
        }
    }
}
4

2 回答 2

3

您需要按照此处所述附加到正在运行的 Word 实例,然后关闭文档:

$wd = [Runtime.Interopservices.Marshal]::GetActiveObject('Word.Application')
$wd.Documents | ? { $_.Name -eq 'some.docx' } | % {
  $_.Saved = $true
  $_.Close()
}

这必须在启动应用程序的用户的上下文中运行,并且它只会附加到首先启动的实例(通常无论如何只有一个实例在运行)。您需要先退出该实例,然后才能附加到第二个启动的实例。

于 2013-08-12T16:48:09.800 回答
0

您可以尝试在其中一个窗口中设置焦点并发送键 Alt F4 以关闭这些进程

http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx

有几种方法可以获取进程窗口的句柄。

祝你好运

于 2013-08-12T16:41:06.050 回答