Имя: Пароль:
1C
 
Процесс 1cv8.exe остается в памяти после подключения ч/з V82.Application
0 mclarry
 
08.06.10
16:50
Работаю с 8.2 из 7.7 с помощью кода:
   connector= CreateObject("V82.Application");
   connector.Connect("Srvr=---;Ref=---;Usr=---;Pwd=---");
   ПД= connector.ExternalDataProcessors.GetForm("---");
   ПД.Open();
   ПД.Close();
   ПД= 0;
   connector=0;
Обработка в 8.2 открывается без проблем, т.е. отрабатывает ПриОткрытии(). У пользователя, под которым стучусь в 8.2, отключен запрос на завершение сеанса.
Проблема в том, что после завершения этой процедуры в памяти остается висеть процесс 1cv8.exe. Хотя в журнале регистрации есть событие "Сеанс завершен". И даже после закрытия сеанса 7.7, из которого все это вызывается, процесс 1cv8.exe остается в памяти.
Кстати, для 8.1 использую точно такой же код - и в памяти ничего не зависает. Движок 8.2.10.82.
Где копать, подскажите?
1 mclarry
 
08.06.10
17:45
Не может быть, что никто не встречался с этим.
2 Лефмихалыч
 
08.06.10
17:58
conector = Неопределено;
3 Лефмихалыч
 
08.06.10
17:58
и ПД - тоже
4 mclarry
 
08.06.10
18:14
В 7.7 нет Неопределено. Использую присвоение нуля. Не помогает.
5 loh_pedalny
 
08.06.10
18:38
В 8.2.10 ошибка была. Обещали пофиксить в 11-й версии
6 mclarry
 
08.06.10
18:41
Понятно. Поздновато что-то ее фиксят...
7 Живой Ископаемый
 
08.06.10
18:48
11-ю уже выпустили.. даже два раза.
8 smaharbA
 
08.06.10
18:48
убить все ОЛЕ пойдет ?
9 mclarry
 
08.06.10
18:52
(7) На последнем ИТС-е вроде еще 10-й лежит. Или я что-то пропустил? Или речь о бете?
(8) Убить программно (не ручками) процессы - pskill?
10 smaharbA
 
08.06.10
19:28
(9) несколько иначе

это убивает запущенные оле текущего пользователя тем же адинес что интерактивный
(подставишь вместо программа что надо и все)


   Шел=СоздатьОбъект("Shell.Explorer");
   ФСО=СоздатьОбъект("Scripting.FileSystemObject");
   Программа=ФСО.GetFile(Шел.fullname()).Name;
   Сеть=СоздатьОбъект("WScript.Network");
   Пользователь=ВРег(Сеть.UserName);
   Компьютер=".";
   Локатор=СоздатьОбъект("wbemscripting.swbemlocator");
   Сервис=Локатор.ConnectServer(Компьютер,"root\cimv2","","","","",128);
   СкриптВБС=СоздатьОбъект("MSScriptControl.ScriptControl");
   СкриптВБС.language="vbscript";
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Скрипт.AddObject("Процессы",Сервис.ExecQuery("select * from win32_process where name='"+Программа+"' and commandline like '%-Embedding%'"));
   Процессы=Скрипт.Eval("new Enumerator(Процессы)");
   Пока Процессы.atEnd(0)=0 Цикл
       Процесс=Процессы.item(0);
       СкриптВБС.AddObject("p_"+Процесс.ProcessId,Процесс);
       СкриптВБС.Eval("p_"+Процесс.ProcessId+".getOwner(user,domain)");
       Если Пользователь=Врег(СкриптВБС.Eval("user")) Тогда
           Сообщить("Убиваем ОЛЕ "+Процессы.item(0).ProcessId);
           Процессы.item(0).Terminate();
       КонецЕсли;
       Процессы.moveNext(0);
   КонецЦикла;
11 raykom
 
08.06.10
19:43
(10) :)) Мерлин. Дай тебе волю, ты бы и значения реквизитам средствами операционки присваивал бы ...
12 Ковычки
 
08.06.10
20:13
Хотя СкриптВБС лишний


   Пока Процессы.atEnd(0)=0 Цикл
       Процесс=Процессы.item(0);
       Владелец=Процесс.ExecMethod_("GetOwner");
       Если Пользователь=Врег(Владелец.User) Тогда
           Сообщить("Убиваем ОЛЕ "+Процесс.ProcessId);
           Процесс.Terminate();
       КонецЕсли;
       Процессы.moveNext(0);
   КонецЦикла;
13 mclarry
 
08.06.10
20:27
(10)(12) Монстры Shell... Попробую. Хотя и так видно, что должно работать.
14 Живой Ископаемый
 
08.06.10
22:46
2(9) на юзерз.в8 зайди
15 mclarry
 
09.06.10
12:08
Хм, все оказалось просто: надо явно вызывать ЗавершитьРаботуСистемы().
Но теперь после установки 11-го релиза появилась другая х...нь: V82.Application всегда запускает движок 8.2.11, а база лежит на сервере под 8.2.10. Конечно, можно снести на клиенте 8.2.11. А есть ли цивилизованный способ запустить соединение OLE под конкретным релизом движка 8.2? В настройках (1cestart.exe) установил "Для версии 8.2.11.232 использовать версию 8.2.10.82" - не помогает.
16 smaharbA
 
09.06.10
12:09
(15) можно зарегистрировать ком для пользователя
можно создать несколько комов
17 smaharbA
 
09.06.10
12:09
(15) завершение работы системы не всегда спасет
18 mclarry
 
09.06.10
12:14
Прикольно: снос 11-го релиза заодно снес и OLE-компоненту V82.Application. А и правильно, если сносить - то как можно больше всего...
19 mclarry
 
09.06.10
12:21
ЗавершитьРаботуСистемы() действительно не помогает, если база лежит на сервере и не используется режим управляемого приложения. Еще начиная с 7.7 как не умела 1С нормально работать через OLE, так и не научили до сих пор.