在我们公司,我们使用Windows应用程序生成word(2010)文档。有时文档没有正确关闭,所以另一个应用程序(是的,他们仍然称之为开发:)杀掉运行超过1分钟的单词进程。
这些被杀死的进程存储在MS Word的“文档恢复”中。在Word 2010中无法关闭这些文档恢复(选项/“保存自动回复信息...”无法解决问题)。当这些“文档恢复”中充满了文档(数十或数百)时,应用程序停止生成文档,我们需要手动清除前端。
所以,我能够编写这个脚本来识别并杀死运行时间超过10秒的进程,但有没有办法正确关闭它(不杀死它)?
我发现本教程使用powershell创建和退出word文档,但是如何使用这些MS Office方法连接特定的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
}
} }
谢谢。
答案 0 :(得分:3)
您需要按照here所述附加到正在运行的Word实例,然后关闭文档:
$wd = [Runtime.Interopservices.Marshal]::GetActiveObject('Word.Application')
$wd.Documents | ? { $_.Name -eq 'some.docx' } | % {
$_.Saved = $true
$_.Close()
}
这必须在启动应用程序的用户的上下文中运行,并且它只会附加到首先启动的实例(通常只有一个实例正在运行)。您需要首先退出该实例,然后才能连接到第二个实例。
答案 1 :(得分:0)
您可以尝试在其中一个窗口中设置焦点,然后发送Alt F4键以关闭这些过程
http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
有几种方法可以获取进程窗口的句柄。
祝你好运