Убить процесс ATL COM под учетной записью SYSTEM? - PullRequest
2 голосов
/ 06 сентября 2011

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

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

Я исчерпал Google, ища решение этой проблемы. Кто-нибудь может помочь?

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

1 Ответ

3 голосов
/ 06 сентября 2011

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

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

  1. Ваш клиент неправильно выпускает все экземпляры, созданные COM-сервером. Я не программист .NET, поэтому я не могу сказать, стоит ли вам позаботиться об этом или сборщик мусора сделает это за вас. Вы наверняка столкнетесь с этой проблемой, если ваша служба будет прервана без надлежащей очистки в результате сбоя или внешнего завершения.
  2. Сервер может увеличить свой счетчик ссылок изнутри по любым причинам, которые имел в виду создатель. Это может быть даже ошибка на сервере.
  3. IIRC, COM может оставить сервер на некоторое время работающим, даже если нет активных клиентов. В этом случае сервер отключится через несколько минут.
...