2009-09-09 12 views
6

Je veux mettre fin à une application en utilisant le chemin d'accès complet du fichier via vb.net, mais je ne l'ai pas trouvé sous Process. J'espérais un Process.Stop facile (filepath), comme avec Process.Start, mais pas une telle chance.Mettre fin à une application par programmation en utilisant un chemin de fichier dans vb.net

Comment puis-je le faire?

+0

Pourquoi devrais-je prendre au sérieux un gars dont le profil dit qu'il vient d'Antartica et est en train de fabriquer un MMORPG qui sera bientôt disponible à l'achat. BTW, vous ne terminez pas les applications à travers leurs chemins de fichiers. Au lieu de cela, vous utilisez le nom du processus qui est généralement le nom du fichier exécutable. –

+0

La chose antarctique est une blague, le MMORPG n'est pas à vendre, mon dernier travail (logiciel, sans rapport avec le mmo) sera bientôt à vendre. Pourquoi devrais-je prendre au sérieux un gars qui ne peut pas prendre une petite blague? Je sais que vous ne terminez pas les applications via leur chemin de fichier, mais je vous demande comment procéder. – Cyclone

Répondre

2

Vous devez examiner la propriété Modules de chaque processus et, à son tour, vérifier les noms de fichiers par rapport au chemin souhaité.

Voici un exemple:

VB.NET

Dim path As String = "C:\Program Files\Ultrapico\Expresso\Expresso.exe" 
    Dim matchingProcesses = New List(Of Process) 

    For Each process As Process In process.GetProcesses() 
     For Each m As ProcessModule In process.Modules 
      If String.Compare(m.FileName, path, StringComparison.InvariantCultureIgnoreCase) = 0 Then 
       matchingProcesses.Add(process) 
       Exit For 
      End If 
     Next 
    Next 

    For Each p As Process In matchingProcesses 
     p.Kill() 
    Next 

C#

string path = @"C:\Program Files\Ultrapico\Expresso\Expresso.exe"; 
var matchingProcesses = new List<Process>(); 
foreach (Process process in Process.GetProcesses()) 
{ 
    foreach (ProcessModule m in process.Modules) 
    { 
     if (String.Compare(m.FileName, path, StringComparison.InvariantCultureIgnoreCase) == 0) 
     { 
      matchingProcesses.Add(process); 
      break; 
     } 
    } 
} 

matchingProcesses.ForEach(p => p.Kill()); 

EDIT: mis à jour le code pour prendre la casse en compte pour les comparaisons de chaînes .

+0

Mon application est dans vb.net, je pense que votre exemple était en C#. Je ne parle pas couramment C#, donc je ne peux pas le porter. – Cyclone

+0

Ajout du code vb.net à mon message. –

+0

Cela devrait fonctionner, merci! – Cyclone

2

essayer

System.Diagnostics.Process.GetProcessesByName (nameOfExeFile) .Premier(). Kill()

Cela ne tient pas compte du chemin du fichier.

+0

Un moyen de le faire * avec * le chemin cependant? Ou, est-il un moyen de trouver le nom du fichier à partir du chemin du fichier? – Cyclone