для этого я предлагаю работать с оснасткой 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