воскресенье, 19 января 2014 г.

Как завершить процесс ОЛЕ-экземпляры 1Сv8.exe, созданный через Application

Существует два способа подключения по OLE к другой базе 1С : COMConnector и Application. При подключении с помощью Application небходимо завершать работу приложения, например

ТекCOMОбъект.ЗавершитьРаботуСистемы();

Тем не менее столкнулась с ситуацией, когда процесс ОЛЕ-экземпляры 1Сv8.exe не завершается, висти, занимает оперативную память. Эта процедура предназначена для принудительного завершения всех процессов OLE 1Сv8.exe, запущенных под текущим пользователем.

Процедура ЗавершитьПроцесс()
   Шел=Новый COMObject("Shell.Explorer");
 ФСО=Новый COMObject("Scripting.FileSystemObject");
 Программа=ФСО.GetFile(Шел.fullname()).Name;
 Сеть        =    Новый COMОбъект("WScript.Network");
    Пользователь=    ВРег(Сеть.UserName);
 objWMIService = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяКомпьютера() +"\root\cimv2");
    ProcessSet = objWMIService.ExecQuery("select * from win32_process where name='"+Программа+"' and commandline like '%-Embedding%'");
    Для Каждого Process Из ProcessSet Цикл
        User    = "";
        Domain    = "";
        
        Process.GetOwner(User, Domain);
        Если вРег(User) = Пользователь Тогда
             Process.Terminate();
      //Сообщить("Убиваем ОЛЕ "+Process.ProcessId);
        КонецЕсли;
     КонецЦикла;
 КонецПроцедуры

Комментариев нет:

Отправить комментарий