Question

J'ai un service .NET Winddows qui fonctionne sous le compte système local. Ce service exécute alors un composant COM qui a été écrit dans ATL sur Visual Studio 6 en utilisant COM Interop. Ce composant COM fonctionne alors sous le compte SYSTEM. Je sais que je peux usurper l'identité d'un autre compte, mais pour l'instant je veux laisser les choses là où ils sont.

Le problème est que, après les fenêtres arrêt du service, les restes de composants COM en cours d'exécution. Je ne peux pas tuer soit le processus. Gestionnaire des tâches ne le tuer alors j'ai essayé TaskKill de la ligne de commande. Cela dit même qu'il a mis fin au processus, mais avec succès quand je vérifie le gestionnaire de tâches, il est toujours en cours. J'ai essayé PsKill mais qui dit refuser l'accès.

J'ai épuisé Google à la recherche d'une solution à cela. Quelqu'un peut-il aider?

En outre, pourquoi est-il en cours d'exécution reste de toute façon?

Était-ce utile?

La solution

Tuer un processus est juste une question d'autorisations. En supposant que Vista / 7 avec contrôle de compte, vous ne serez pas en mesure de tuer un processus système si vous n'êtes pas en cours d'exécution en tant qu'administrateur. Note - il ne suffit pas d'être membre du groupe d'administrateurs locaux. Vous devez lancer le gestionnaire de tâches / processus explorateur / ou pskill tout en utilisant « Exécuter en tant qu'administrateur » pour les exécuter effectivement avec des autorisations administratives. Sinon, vous êtes juste un utilisateur régulier, et vous êtes refusé.

En ce qui concerne le serveur COM coller autour de: serveurs COM ont un compte de référence, et ils se fermer seulement après le décompte tombe à 0. Dans votre cas, le serveur peut ne pas fermer en raison de quelques raisons:

  1. Votre client ne libère pas correctement toutes les instances créées par le serveur COM. Je ne suis pas un programmeur .NET, donc je ne peux pas dire si cela est quelque chose que vous devez prendre en charge, ou si la collecte des ordures fait pour vous. Vous aurez ce problème pour sûr si votre service est mis fin sans nettoyage correctement, à la suite d'un accident ou à la résiliation externe.
  2. Le serveur peut augmenter son nombre de référence interne, pour une raison quelconque le créateur avait à l'esprit. Cela pourrait même être un bogue dans le serveur.
  3. IIRC, COM peut laisser un serveur en cours d'exécution pendant un certain temps, même s'il n'y a pas de clients actifs. Si tel est le cas, le serveur s'arrête au bout de quelques minutes.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top