Убить процесс ATL COM в рамках системной учетной записи?
-
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. В вашем случае сервер может не отключиться по нескольким причинам:
- Ваш клиент не выпускает все экземпляры, созданные сервером COM. Я не программист .NET, поэтому я не могу сказать, о чем вы должны позаботиться, или сборы мусора делают это для вас. У вас будет эта проблема наверняка, если ваш сервис будет прекращен без должной очистки, в результате сбоя или внешнего завершения.
- Сервер может увеличить количество ссылок внутренне, по каким -либо причинам, который имел в виду создатель. Это может быть даже ошибкой на сервере.
- IIRC, COM может оставить сервер, работающий на некоторое время, даже если нет активных клиентов. Если это так, сервер отключится через несколько минут.