2012-06-15 13 views
8

アプリケーションのインスタンス(vb.netではなく)がすでに実行中であるかどうかを調べようとしています。なぜなら、起動したいと思っていますが、すでに実行中の場合は起動したくないからです。プロセスが実行中かどうかを確認するソリューションを見つけました。> = 1(またはプロセス番号のみ)の場合はtrueを返します。VB.NETでプロセス名のリストを取得するにはどうすればよいですか?

私の問題は、これはサードパーティのアプリケーションであり、そのプロセス名は単なる名前ではありませんが、バージョン番号(実行時にはわかりません)が含まれていて、 32(おそらくx64にインストールされていれば* 64でしょうか?)

"processname"が名前の部分文字列であるかどうかをテストするには、名前で実行中のプロセスのリストを取得する必要があります。 しかし、私は名前のリストを取得するのに成功しておらず、プロセスIDのみを取得しています。

答えて

7

を。

あなたは使用することができます。これは、プロセスのすべてに目を通すと、processNameを含む任意のプロセスが現在実行中のプロセスに存在する場合はTrueにprocExists値を設定します

Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName)) 

。これは、未知のバージョン番号と、64ビットOSで動作している場合に発生する可能性のある*32の存在を処理する必要があります(これは、64ビットOS上で動作する32ビットプロセスであることを示すWOW64フラグです)。

+0

。 * 32の説明をありがとうございます。 – Thalia

+0

@emptyheadedファイルの一番上に "Import System.Linq"を追加するだけで、Anyが動作するはずです。 LINQ拡張メソッド(http://msdn.microsoft.com/en-us/library/bb534972.aspx) –

+1

@ Reduce Copsey:p.Name.Containsの代わりに 'p.ProcessName.Contains'にする必要はありませんか? .AnyがcaseINSensitiveであるかどうかはわかりません。そうでなければ、いくつかの追加の.ToUpperがプロセス名を検索するのに役立ちますか? – PeterCo

6

あなたはこのような実行中のプロセスをループすることができます:「ProcessNameのは」名前の部分文字列である場合、私は名前で、実行中のプロセスのリストを取得する必要があり、テスト

For Each p As Process In Process.GetProcesses() 
    Debug.WriteLine(p.ProcessName) 
Next 
2

別の方法:私はこれを試してみましたが、 "どれ" は動作しません

Dim psList() As Process 
    Try 
     psList = Process.GetProcesses() 

     For Each p As Process In psList 
      Console.WriteLine(p.Id.ToString() + " " + p.ProcessName) 
     Next p 

    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
    Console.ReadKey() 
関連する問題