6

当社では、Windows アプリケーションを使用して Word (2010) ドキュメントを生成しています。ドキュメントが適切に閉じられていない場合があるため、別のアプリケーション (はい、まだ開発と呼ばれています:) が 1 分以上実行されている word プロセスを強制終了します。

これらの強制終了されたプロセスは、MS Word の「ドキュメント リカバリ」に保存されます。これらのドキュメントの回復は、Word 2010 でオフにすることはできません (オプション/[自動回復情報を保存..] では問題は解決しません)。これらの「ドキュメント リカバリ」がドキュメント (数十または数百) でいっぱいになると、アプリケーションはドキュメントの生成を停止し、手動でフロントをクリアする必要があります。

このスクリプトを記述して、10 秒以上実行されているプロセスを特定して強制終了することができましたが、適切に (強制終了せずに) 閉じる方法はありますか?

このチュートリアルでは、powershell を使用して 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()
}

これは、アプリケーションを開始したユーザーのコンテキストで実行する必要があり、最初に開始されたインスタンスにのみアタッチされます (通常、実行中のインスタンスは 1 つだけです)。2 番目に開始されたインスタンスにアタッチする前に、まずそのインスタンスを終了する必要があります。

于 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 に答える