2015-02-23 6 views
0

Один из моих процессов в сервисе - это Microsoft interop dll для запуска процесса winword и создания одного документа. Из-за какой-то неизвестной проблемы процесс не завершается (происходит очень редко), из-за чего весь процесс создания winword после этого застревает.Убейте процесс winword, выполняющийся более двух минут

Я хочу использовать одну служебную утилиту, которая будет проверять, работает ли какой-либо процесс winword более 2 минут и убивает этот процесс. Таким образом, последовательный оператор create будет работать как обычно. Я бы сделал это в службе Windows. (C#)

+3

Что происходит, когда ваш клиент фактически использует слово для чего-то другого, кроме вашего приложения? Как вы думаете, он будет расточать каждые 2 минуты? –

+0

Вы должны поработать над тем, что представляет собой неизвестная проблема. – Sayse

+0

Создает экземпляр нового экземпляра и создает документ Word. Который, я полагаю, не происходит, если предыдущий экземпляр где-то застрял. Я предполагаю, что предыдущий процесс должен ждать ответа на запрос, например Save/Cancel. Из-за чего следующий процесс не запускается. – Jay

ответ

1

Я согласен с комментаторами в том, что убийство Word не является самым изящным решением, но если у вас нет альтернатив, то вы можете убивать процессы с заданным именем, которое было запущено более чем на 2 минут.

// I tested with notepad so you would switch this with the Microsoft Word exe name. 
string processName = "notepad"; 
Process[] processes = Process.GetProcessesByName(processName); 

foreach (Process process in processes) 
{ 
    TimeSpan runningTime = DateTime.Now - process.StartTime; 
    if (runningTime.TotalMinutes > 2) 
     process.Kill(); 
} 
+0

Я пытался сделать с этим подходом, но winword создает только один экземпляр winword.exe, и если я убью winword.exe, он остановится текущая операция также, если таковая имеется. Есть ли способ узнать, как убить один документ – Jay

Смежные вопросы