Убить процесс 1С

Здравствуйте!

В гриде есть кнопка, по которой стартует экспорт в 1С одной выделенной записи. Вот функция коннекта к 1С:

Window.Show();
var IsExclusive = false;
var Path = '\\\\dc\\1cbase$\\Торговля\\Торговля 2010';
var Login = '***';
var Password = '***';
var v77 = new ActiveXObject('V77.Application');
var ConnectParams = Generate1CParamString(Path, Login, Password, IsExclusive);
v77.Initialize(v77.RMTrade, ConnectParams, 'NO_SPLASH_SHOW');

Как заставить процесс 1С, который продолжает висеть в процессах, завершиться после выполнения функции?

Добавлял в конец функции строку

Disconnect1CConnections();

Из скрипта scr_Main
Но эта функция процесс не закрывает. Может быть кто-нибудь сталкивался с такой проблемой?

Нравится

8 комментариев

Здравствуйте!

Можно попробовать воспользоваться функцией возврата PID по имени процесса:

http://www.community.terrasoft.ua/blogs/2974

Если такой процесс существует, убить его утилитой TaskKill:

taskkill /pid 1230

где 1230 - Process ID, который вернула функция.

А далее, можно выполнить данную команду с помощью WScript.Shell:

var WshShell = new ActiveXObject('WScript.Shell');
WshExec = WshShell.Exec('taskkill /pid ' + PID);

Доброго времени суток!

Спасибо за ответ. Но не получается, так как он почему то не находит нужный процесс. Писал "1CV7" и "1CV7.exe". Процесс в это время запущен, проверял.

А как возвратить названия всех запущенных процессов?

Дмитрий, может попробовать убить по названию процесса?

var WshShell = new ActiveXObject('WScript.Shell');
WshExec = WshShell.Exec('taskkill /s ComputerName /f /im notepad.exe');

А что если нужно убить процесс только текущего пользователя?

Попробуйте в конце работы с 1С добавить такой код, может быть поможет:

	v77.ExitSystem(0);
	v77 = null;
	CollectGarbage();

Поставил в конец функции, и после выполнения спрашивает закрыть ли программу, нажимаю да, но процесс остается висеть в задачах...

После вызова Initialize надо еще такое вызвать:

v77.ExecuteBatch('СохранитьЗначение("НеЗапрашиватьПодтверждениеПриВыходе",1)');

Здравствуйте!

Закрывать 1С77 следует вот такой конструкцией:

	if (Assigned(Param.Obj1C)) {
		Param.Obj1C.ExitSystem(0);
	}
	Param.Obj1C = System.EmptyValue;
	CollectGarbage();
Показать все комментарии