Pregunta

Tengo un servicio .NET Winddows que se ejecuta bajo la cuenta del sistema local. Este servicio luego ejecuta un componente COM que fue escrito en ATL en Visual Studio 6 usando COM Interop. Este componente COM se ejecuta bajo la cuenta del sistema. Sé que puedo hacerse pasar por otra cuenta, pero por ahora quiero dejar cosas donde están.

El problema es que después de que el servicio de Windows se detiene, el componente COM sigue en ejecución. Tampoco puedo matar el proceso. El administrador de tareas no lo matará, así que probé TaskKill desde la línea de comando. Esto incluso dice que terminó el proceso con éxito, pero cuando verifique el administrador de tareas, todavía se está ejecutando. He probado PSKill, pero eso dice que el acceso se negó.

He agotado a Google buscando una solución a esto. ¿Alguien puede ayudar?

Además, ¿por qué sigue funcionando de todos modos?

¿Fue útil?

Solución

Matar un proceso es solo una cuestión de permisos. Asumiendo Vista/7 con UAC ON, no podrá matar un proceso del sistema si no se está ejecutando como administrador. Nota: no es suficiente ser miembro del grupo de administradores locales. Debe iniciar Task Manager / Process Explorer / PSKill o lo que sea que use "Ejecutar como administrador" para ejecutarlos realmente con permisos administrativos. De lo contrario, solo eres un usuario habitual y te niegan.

En cuanto al servidor COM que se queda: los servidores COM tienen un recuento de referencias, y se cierran solo después de que el recuento cae a 0. En su caso, el servidor podría no apagar debido a algunas razones:

  1. Su cliente no está lanzando correctamente todas las instancias creadas por el servidor COM. No soy un programador de .NET, así que no puedo decir si esto es algo de lo que debes cuidar o si la recolección de basura lo hace por ti. Tendrá ese problema con seguridad si su servicio termina sin limpiar correctamente, como resultado de un bloqueo o terminación externa.
  2. El servidor podría aumentar su conteo de referencia internamente, por cualquier razón que el creador tenía en mente. Esto podría incluso ser un error en el servidor.
  3. IIRC, COM puede dejar un servidor ejecutándose por un tiempo, incluso si no hay clientes activos. Si ese es el caso, el servidor se apagará después de unos minutos.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top