DOBON.NET DOBON.NETプログラミング掲示板過去ログ

プロセス一覧にユーザ名を付加したい

環境/言語:[Windows2000Server / VB.NET / .NET Framework1.1]
分類:[.NET]

貴.NetTips「実行されているすべてのプロセスを取得する」をサンプルにしています。

    Dim getStr As String

    'リストボックスクリア
    ListBox1.Items.Clear()

    'ローカルコンピュータ上で実行されているすべてのプロセスを取得
    Dim ps() As System.Diagnostics.Process = _
                System.Diagnostics.Process.GetProcesses()

    '配列から1つずつ取り出す
    Dim p As System.Diagnostics.Process
    For Each p In ps

        'プロセスID、プロセス名を出力する
        getStr = p.Id & vbTab & p.ProcessName
        ListBox1.Items.Add(getStr)

    Next

行いたいことは、
プロセス一覧にプロセスを起動したユーザ名を表示したいのですが
それらしいプロパティが見つかりません、どのようの行ったらいいでしょうか?

プロセスIDからAPI等を使って取得することが可能でしょうか?
■No1615に返信(じゅんこさんの記事)
> プロセス一覧にプロセスを起動したユーザ名を表示したいのですが
> それらしいプロパティが見つかりません、どのようの行ったらいいでしょうか?

WMIが使えれば、これを使って取得できます。

Dim mc As New System.Management.ManagementClass("Win32_Process")
Dim moc As System.Management.ManagementObjectCollection = mc.GetInstances()
Dim mo As System.Management.ManagementObject
For Each mo In moc
Dim id As String = mo("ProcessId").ToString()

Dim methodName(1) As String
mo.InvokeMethod("GetOwner", methodName)
Dim user As String = methodName(0)
Dim domain As String = methodName(1)

Console.WriteLine("ID:{0}", id)
Console.WriteLine("User:{0}", user)
Next mo
■No1627に返信(管理人さんの記事)
> ■No1615に返信(じゅんこさんの記事)
>>プロセス一覧にプロセスを起動したユーザ名を表示したいのですが
>>それらしいプロパティが見つかりません、どのようの行ったらいいでしょうか?
>
> WMIが使えれば、これを使って取得できます。

早速のレスありがとうございます。

実行してみたのですが、
プロセスを起動したユーザ(アカウント)と、この一覧出力を実行していているユーザ
が同じ場合問題ないのですが、以下のような場合ユーザ名が表示されません

ブラウザ経由(ASP)で「aaa」というアプリをユーザ:aspuserで実行する
WEBサーバ側にはプロセスがあがります、タスクマネージャでも見れます
しかし、このプロセス一覧を取得するアプリ(VB.NET、WMI)をadminで実行すると
ユーザ名が表示されません。aspuserでログオンして実行するとユーザ名が見れます

adminで全てのプロセスの起動したユーザ名を取得することは出来ないのでしょうか?
プロセスIDやプロセス名はユーザが異なっても見えるのですがプロセス名は
同一ユーザ見えないと言う事でしょうか。よろしくお願いします。

DOBON.NET | プログラミング道 | プログラミング掲示板