Как снять задачу/процесс из 1Cv8 под Windows через COM объект

для этого я предлагаю работать с оснасткой 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";
    
    ПроцессЗавершитьВсеНайденные(ИмяФайлаЗапуска, ПодстрокиКоманднойСтроки);
КонецПроцедуры

+ Нет комментариев

Добавить свой