2009-10-29 4 views
5

Je construis un programme C# qui décompresse un fichier et travaille sur ce fichier.Comment tuer un processus C#?

Parfois, je reçois ce message: « le processus ne peut pas accéder au fichier c: .... car il est utilisé par un autre processus »

Qu'est-ce que je peux faire? Comment le tuer?

Répondre

10

Vous devez trouver le programme qui accède au fichier. Avez-vous oublié de quitter l'une de vos propres applications, ou y a-t-il d'autres personnes accédant au fichier?

Vous pouvez écrire du code C# pour tuer un processus, mais une meilleure approche consisterait à découvrir pourquoi il est déjà utilisé par un autre processus.

Pour tuer tous les processus avec le nom nameOfProcess en C#:

Process[] ps = Process.GetProcessesByName("nameOfProcess"); 

foreach (Process p in ps) 
    p.Kill(); 

En outre, comme les notes @Darin, vous pouvez jeter un oeil à cette autre SO fil: outils How do I find out which process is locking a file using .NET?

Les Sysinternals est mentionné par @Darin dans les commentaires est trouvé à http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

+2

Pour savoir d'abord qui verrouille votre fichier, jetez un oeil à ProcessMonitor de sysinternals. Cliquez simplement sur la longue-vue dans la barre d'outils et entrez le nom de votre fichier. Vous obtenez une liste de tous les processus qui ont un handle ouvert à ce fichier. – Oliver

2

Process Monitor fonctionnera, mais Process Explorer est une bien meilleure application pour ce. Il est également de Sysinternals qui est maintenant détenue par Microsoft. Exécutez Process Explorer en tant qu'administrateur, puis cliquez sur le bouton de recherche. Cela affichera ensuite les applications et les threads qui utilisent le fichier.

+0

Je seconde cette réponse. Cela m'a beaucoup aidé dans mon débogage. – Joel