2009-09-09 15 views
6

vb.net経由で完全なファイルパスを使用してアプリケーションを終了したいが、そのプロセスの下にそのファイルが見つかりませんでした。 Process.Startのような簡単なProcess.Stop(ファイルパス)を望んでいましたが、そのような運はありません。vb.netのファイルパスを使用してアプリケーションをプログラムで終了する

どうすればいいですか?

+0

なぜ私は真剣に、プロファイルが、彼は南極からだとすぐに購入可能でしょうMMORPGを作っていると言う男を取るだろう。ところで、ファイルパスを使ってアプリケーションを終了させることはありません。代わりに、通常は実行可能ファイルの名前であるプロセスの名前を使用します。 –

+0

南極のことは冗談ですが、MMORPGは販売されていません。私の最新の仕事(ソフトウェアはmmoと無関係です)は間もなく発売予定です。なぜ私は小さい冗談を取れない人を真剣に受けなければならないのですか?私はあなたがファイルパスを介してアプリケーションを終了させないことを知っていますが、私はそうする方法について尋ねています。 – Cyclone

答えて

2

各プロセスの[モジュール]プロパティを調べて、必要に応じてファイル名を確認する必要があります。ここで

は例です:

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:は、文字列の比較のために、アカウントに大文字と小文字の区別を取るために、コードを更新。

+0

私のアプリケーションはvb.netにあり、私はあなたの例がC#であったと思います。私はC#に慣れていないので、これを移植することはできません。 – Cyclone

+0

私のポストにvb.netコードを追加しました。 –

+0

それはうまくいくはずです、ありがとう! – Cyclone

2

System.Diagnostics.Process.GetProcessesByName(nameOfExeFile)1次回を()してみてください。(殺す)

これは、ファイルのパスを無視します。

+0

それをやる*パスはありますか?または、ファイルパスからファイルの名前を見つける方法はありますか? – Cyclone

関連する問題