質問: Blue Prismのタグをつけていますが、これはBlue Prismのコードステージに書いて実行しています。 なので、制御室からRRで実行する場合は、ひとつのRRにロボットアカウント1個しかいないので、この問題は出ません。 たとえば開発環境のようなインタラクティブクライアントで、複数のユーザがデバッグ実行するときに問題になるものです。 だからまあ本番で問題ないからいいじゃんと言われればそうなので今すぐ超困る話ではないのですが、 開発ユーザが増えてくるとそこそこ困るというお話です......。
回答: 「WMI プロセス ユーザ名」でググると結構ヒットします。 VB.NET で書かれたものを抜粋すると などいろいろ なんだか元ネタが同一っぽい気もしますが・・・ 他のユーザが起動したプロセスはユーザ名取得時、エラーになることががありますが、 自分かそうでないかを判断すればよいわけで、エラーになれば自分のプロセスではない、 というロジックで良いと思います、 WMI はちょっと遅いので API でゴリゴリ書いた例を紹介しておきます。(C#) ### 追記 Framework に何か部品がないかなーと調べてみたのですが、System.Security.Principal.WindowsIdentity を使うと、もっと簡単になります。 ``` Imports System.Runtime.InteropServices Imports System.Security.Principal Module Module1 Sub Main() For Each p In Process.GetProcesses() Using wid As WindowsIdentity = GetWindowsIdentity(p) Debug.WriteLine("{0} {1}", p.ProcessName, If(wid Is Nothing, "(Error)", wid.Name)) End Using p.Dispose() Next End Sub Public Function GetWindowsIdentity(ByVal process As Process) As WindowsIdentity Dim tokenHandle As IntPtr Try If OpenProcessToken(process.Handle, TOKEN_QUERY, tokenHandle) Then Return New WindowsIdentity(tokenHandle) End If Catch ex As Exception Finally If tokenHandle <> IntPtr.Zero Then CloseHandle(tokenHandle) End If End Try Return Nothing End Function Private Const TOKEN_QUERY = &H8 Private Function OpenProcessToken(ByVal ProcessHandle As IntPtr, ByVal DesiredAccess As Integer, ByRef TokenHandle As IntPtr) As Boolean End Function Private Function CloseHandle(ByVal hHandle As IntPtr) As Boolean End Function End Module ``` OpenProcessToken を公開しているメソッドがあれば、API 使わなくて済むのですが、今のところ見つからないです。