par programme tuer un processus en vista/windows 7 en C#
Je veux tuer un processus par programme dans windows vista/windows 7 (je ne sais pas si il y a des problèmes importants dans la mise en œuvre du contrôle de compte d'utilisateur entre les deux pour faire une différence).
Droit maintenant, mon code ressemble à ceci:
if(killProcess){
System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("MyProcessName");
//Before starting the new process make sure no other MyProcessName is running.
foreach (System.Diagnostics.Process p in process)
{
p.Kill();
}
myProcess = System.Diagnostics.Process.Start(psi);
}
Je dois le faire parce que j'ai besoin pour s'assurer que si l'utilisateur bloque le programme ou le quitte brusquement, ce second processus est redémarré au redémarrage de l'application, ou si l'utilisateur veut changer les paramètres de ce processus secondaire.
Le code fonctionne très bien sous XP, mais ne fonctionne pas dans Windows 7 (et je suppose que dans Vista) avec un "accès refusé". À partir de ce que le tout-Puissant Google me l'a dit, j'ai besoin d'exécuter ma mise à mort de programme en tant qu'administrateur pour contourner ce problème, mais c'est juste de la faiblesse de la sauce. Les autres possibilités de réponse est d'utiliser LinkDemand, mais je ne comprends pas la page msdn pour LinkDemand comme il se rapporte à des procédés.
Que je pourrais passer le code dans un thread, mais qui a une foule d'autres difficultés inhérentes à ce que je ne veux vraiment pas à découvrir.
Peut-être que c'est juste un windows 7 bug alors? Vous pouvez poster votre code dans une réponse? Parce que c'est juste incompréhensible pour moi.
OriginalL'auteur mmr | 2009-02-13
Vous devez vous connecter pour publier un commentaire.
Vous avez raison c'est parce que vous n'avez pas de privilèges administratifs. Vous pouvez résoudre ce problème en installant un service en vertu de l'utilisateur du système local et l'exécution d'une commande personnalisée à l'encontre de ce qu'il fallait.
Dans votre formulaire windows app:
À votre service:
C'est le seul moyen que je connaisse pour accomplir cela sans que l'utilisateur devient ennuyeux invite UAC. Heureusement, vous ne devriez pas avoir de savoir quelque chose au sujet de services (autres que l'installation de celui-ci) afin de le mettre en œuvre. Le VS modèle avec le code que je vous ai donné ajouté fonctionnera parfaitement.
Oui, c'est le chemin à parcourir. Merci pour l'aide!
OriginalL'auteur Andrew Ensley
Je vais ajouter le code pour Simon de Buchan, de la suggestion. Il a un sens et devrait fonctionner aussi bien, en supposant que votre formulaire windows est ce qui a lancé le processus en premier lieu.
Voici l'endroit où vous créez le processus. Avis de la variable myProc. C'est votre poignée sur elle:
Plus tard, juste le tuer avec:
Ensuite, le service d'approche est probablement votre meilleure (seule?) solution.
OriginalL'auteur Andrew Ensley