たとえば二重起動しては困るようなアプリを起動するときに、起動前に「そのプロセスが既にありますか?」と確認する動作を入れます。
それで
たとえばそのプロセスがメモ帳だとして
こんな感じでメモ帳のプロセスがあるかぐるぐる回して探します。(全部じゃなくその回す動作のところだけ書きます)
VB
1for each p as system.diagnostics.process in system.diagnostics.process.getprocessesbyname("notepad") 2 exists = true 3 exit sub 4next
今日、あるアプリを、絶対に起動してないことを目視で確認したのに、これを回すと「そのプロセスあります」と出てしまうのです。
おかしいなと思って、プロセスの稼働状況を見てみました。
いつも、プロセスの稼働状況を詳しく見るときは
Process Explorer
を使って見ます。
これで見てわかったのは
私がこの作業をしていたのはWindowsServerで
私の他にあと何人か別のユーザがログインしていて、
そのなかの誰かがそのアプリを使っていたのでした。
なので、知りたいのは、「そのプロセスが自分のプロセスかどうか」です。
自分のじゃないってわかればユーザ名はわからなくていいです。
Linuxだとpsで見るところですが
VB.NETならどのように書けば、「プロセス名を指定して、当該のプロセスが自分のプロセスかどうかを返り値で得る」ことができるのでしょうか。
上に書いたものは「プロセス名が探しているものと一致したらOK」なのですが、
これにさらに「自分のプロセスだったら」という条件を足したいのです。
が、書き方がわかりません。
よろしくお願いします。
#補足
Blue Prismのタグをつけていますが、これはBlue Prismのコードステージに書いて実行しています。
なので、制御室からRRで実行する場合は、ひとつのRRにロボットアカウント1個しかいないので、この問題は出ません。
たとえば開発環境のようなインタラクティブクライアントで、複数のユーザがデバッグ実行するときに問題になるものです。
だからまあ本番で問題ないからいいじゃんと言われればそうなので今すぐ超困る話ではないのですが、
開発ユーザが増えてくるとそこそこ困るというお話です……。