для этого я предлагаю работать с оснасткой MS Windows и запросом поиска по имени файла запуска, а затем обрабатывать результаты.
Нужно понимать, что это универсальный метод и он позволяет управлять процессами в том числе и на удаленном компьютере (нужно прописать имя удаленного компьютера)
Процедура ПроцессЗавершитьВсеНайденные(ИмяФайлаЗапуска = "1cv8.exe", ПодстрокаКоманднойСтроки = "") Экспорт Оснастка = ПолучитьCOMОбъект("winmgmts:\\.\root\cimv2"); МассивПодстрокКоманднойСтроки = СтрРазделить(ПодстрокаКоманднойСтроки, ",", Ложь); Процессы = Оснастка.ExecQuery("Select * from Win32_Process Where Name=" + "'" + ИмяФайлаЗапуска + "'"); Для Каждого Процесс Из Процессы Цикл КоманднаяСтрокаЗапуска = Процесс.CommandLine; УсловияНеВыполнены = Ложь; Для каждого ТекущаяПодстрока Из МассивПодстрокКоманднойСтроки Цикл Если Найти(КоманднаяСтрокаЗапуска, ТекущаяПодстрока) = 0 Тогда УсловияНеВыполнены = Истина; Прервать; //должны совпасть все подстроки КонецЕсли; КонецЦикла; Если УсловияНеВыполнены = Ложь Тогда Процесс.Terminate(); КонецЕсли; КонецЦикла; КонецПроцедуры
для использования этого кода я предлагаю следующие вызовы:
Процедура ЗавершитьПроцессыРежимаПредприятие1С(ПодстрокаИмениБазыВСпискеБаз = "", ИмяФайлаЗапуска = "1cv8.exe") Экспорт ПодстрокиКоманднойСтроки = "ENTERPRISE" + ?(ЗначениеЗаполнено(ПодстрокаИмениБазыВСпискеБаз) = Истина, ", " + ПодстрокаИмениБазыВСпискеБаз, ""); ПроцессЗавершитьВсеНайденные(ИмяФайлаЗапуска, ПодстрокиКоманднойСтроки); КонецПроцедуры Процедура ЗавершитьПроцессыРежимаПредприятие1СEmbedding(ПодстрокаИмениБазыВСпискеБаз = "", ИмяФайлаЗапуска = "1cv8.exe") Экспорт ПодстрокиКоманднойСтроки = "-Embedding"; ПроцессЗавершитьВсеНайденные(ИмяФайлаЗапуска, ПодстрокиКоманднойСтроки); КонецПроцедуры
Полный текст общего модуля ОС удаляющего процессы 1С предприятия
Процедура ПроцессЗавершитьВсеНайденные(ИмяФайлаЗапуска = "1cv8.exe", ПодстрокаКоманднойСтроки = "") Экспорт Оснастка = ПолучитьCOMОбъект("winmgmts:\\.\root\cimv2"); МассивПодстрокКоманднойСтроки = СтрРазделить(ПодстрокаКоманднойСтроки, ",", Ложь); Процессы = Оснастка.ExecQuery("Select * from Win32_Process Where Name=" + "'" + ИмяФайлаЗапуска + "'"); Для Каждого Процесс Из Процессы Цикл КоманднаяСтрокаЗапуска = Процесс.CommandLine; УсловияНеВыполнены = Ложь; Для каждого ТекущаяПодстрока Из МассивПодстрокКоманднойСтроки Цикл Если Найти(КоманднаяСтрокаЗапуска, ТекущаяПодстрока) = 0 Тогда УсловияНеВыполнены = Истина; Прервать; //должны совпасть все подстроки КонецЕсли; КонецЦикла; Если УсловияНеВыполнены = Ложь Тогда Процесс.Terminate(); КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ЗавершитьПроцессыРежимаПредприятие1С(ПодстрокаИмениБазыВСпискеБаз = "", ИмяФайлаЗапуска = "1cv8.exe") Экспорт ПодстрокиКоманднойСтроки = "ENTERPRISE" + ?(ЗначениеЗаполнено(ПодстрокаИмениБазыВСпискеБаз) = Истина, ", " + ПодстрокаИмениБазыВСпискеБаз, ""); ПроцессЗавершитьВсеНайденные(ИмяФайлаЗапуска, ПодстрокиКоманднойСтроки); КонецПроцедуры Процедура ЗавершитьПроцессыРежимаПредприятие1СEmbedding(ПодстрокаИмениБазыВСпискеБаз = "", ИмяФайлаЗапуска = "1cv8.exe") Экспорт ПодстрокиКоманднойСтроки = "-Embedding"; ПроцессЗавершитьВсеНайденные(ИмяФайлаЗапуска, ПодстрокиКоманднойСтроки); КонецПроцедуры
+ There are no comments
Add yours