Убить процесс ATL COM в рамках системной учетной записи?

StackOverflow https://stackoverflow.com/questions/7318266

  •  26-10-2019
  •  | 
  •  

Вопрос

У меня есть служба .NET Winddows, которая работает под учетной записью локальной системы. Затем эта служба запускает компонент COM, который был написан в ATL на Visual Studio 6 с использованием Com Interop. Этот компонент COM затем работает под системной учетной записью. Я знаю, что могу выдать себя за еще один аккаунт, но сейчас я хочу оставить вещи там, где они есть.

Проблема в том, что после остановки службы Windows компонент COM остается запущенным. Я тоже не могу убить процесс. Менеджер задач не убьет его, поэтому я попробовал Taskkill из командной строки. Это даже говорит о том, что он успешно прекратил процесс, но когда я проверяю диспетчер задач, он все еще работает. Я попробовал PSKILL, но это говорит о доступе отказано.

Я исчерпал Google в поисках решения для этого. Кто -нибудь может помочь?

Кроме того, почему он все равно работает?

Это было полезно?

Решение

Убийство процесса - это лишь вопрос разрешений. Предполагая Vista/7 с UAC, вы не сможете убить системный процесс, если не работаете в качестве администратора. Примечание - этого недостаточно, чтобы быть членом группы местных администраторов. Вы должны запустить Manager / Process Explorer / Process Explorer / PSKILL или что -то в этом роде, используя «запуск в качестве администратора», чтобы фактически запустить их с административными разрешениями. В противном случае вы просто обычный пользователь, и вам отказано.

Что касается сервера COM: Com -серверы имеют количество ссылок, и они отключились только после того, как счет упал до 0. В вашем случае сервер может не отключиться по нескольким причинам:

  1. Ваш клиент не выпускает все экземпляры, созданные сервером COM. Я не программист .NET, поэтому я не могу сказать, о чем вы должны позаботиться, или сборы мусора делают это для вас. У вас будет эта проблема наверняка, если ваш сервис будет прекращен без должной очистки, в результате сбоя или внешнего завершения.
  2. Сервер может увеличить количество ссылок внутренне, по каким -либо причинам, который имел в виду создатель. Это может быть даже ошибкой на сервере.
  3. IIRC, COM может оставить сервер, работающий на некоторое время, даже если нет активных клиентов. Если это так, сервер отключится через несколько минут.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top