プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
C#、終了する対象のプロセス名を正規表現で指定して強制終了する
結論から書くと

System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();

foreach (System.Diagnostics.Process p in ps)
{
    if(System.Text.RegularExpressions.Regex.IsMatch(p.ProcessName, @"^hoge[0-9]+\.exe$")) {
        p.Kill();
    }
}

のように

System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();

foreach (System.Diagnostics.Process p in ps)
{
    if(System.Text.RegularExpressions.Regex.IsMatch(p.ProcessName, @"【終了するプロセス名の指定(正規表現)】")) {
        p.Kill();
    }
}

とすれば、できました。
ぶっちゃけ、このやり方が正しいのかは自信がないですけどね(^^;

それでは詳細……というほどでもないですが、詳細を書いていきます。

ちょっくら外部プロセスを強制終了させる必要がありましてね。

……本当は強制じゃない終了をさせたかったのですが、
やり方が見つからなかったので強制終了させることにしましてね。

やり方を調べたのです。

そうしたら、こんなやり方が見つかりましたφ(--)

System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName(【終了するプロセス名】);

foreach (System.Diagnostics.Process p in ps)
{
    p.Kill();
}

ふむふむ。なるほど。
プロセス名が一致するプロセスを取得してkillするのですね。

それでは、これを使って……あれ(--?
正規表現で指定できないのですか?

今回は、例えば「hoge1.exe」「hoge2.exe」のようなプロセスを終了させたかったのです。
プロセス名の途中が任意で変わるから、ピンポイントでプロセス名を指定できないのですよね(--ゞ

……(--)

正規表現、使えないの?
マジで?

仕方ないので5分くらい考えて、こんな感じにしましたφ(--)

System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();

foreach (System.Diagnostics.Process p in ps)
{
    if(System.Text.RegularExpressions.Regex.IsMatch(p.ProcessName, @"^hoge[0-9]+\.exe$")) {
        p.Kill();
    }
}

やっていることは力技です。
動いているプロセスを全部取得して、地道に1つずつ、
プロセス名が条件に一致するか判定しています。

ぶっちゃけ、自分でも「こんなやり方で良いのだろうか?(--;」と疑問は感じるのですけどね。
やりたいことはできたので、取りあえず良しとしています。

もし、もっとスマートなやり方をご存じの方がいらっしゃったら
こっそり教えてくださいm(__)m

GetProcessesByName()で正規表現が使えたら嬉しいんだけどなぁ(-。-)ぼそっ

取りあえず、そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● C#  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト