簡體   English   中英

如何在C#中的64位OS中獲取進程所有者名稱

[英]How to get process owner name in 64 bit OS in C#

如何確定C#中進程的所有者?

public string GetProcessOwner(int processId)
{
    string query = "Select * From Win32_Process Where ProcessID = " + processId;
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    ManagementObjectCollection processList = searcher.Get();

    foreach (ManagementObject obj in processList)
    {
        string[] argList = new string[] { string.Empty, string.Empty };
        int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
        if (returnVal == 0)
        {
            // return DOMAIN\user
            return argList[1] + "\\" + argList[0];
        }
    }

    return "NO OWNER";
}

我詳細研究並實現了上面給出的代碼。 這段代碼可以正常工作,但只獲取那些32位進程的所有者名稱。 對於64位進程,該方法返回“無所有者”。 請幫助我,我如何獲得32位進程和64位進程的進程所有者名稱。

不,該代碼工作正常。 當您的代碼是32位但目標進程是64位時,它也可以工作,因此這里也沒有問題。

您可能會收到“沒有所有者”的可能原因:

  • 您試圖獲取您沒有權限的所有者(例如,您以非特權用戶身份運行,但是試圖獲取特權用戶的所有者)。
  • 您試圖獲取偽進程的所有者(例如,PID為4的“系統”或PID為0的“系統空閑進程”)。

順便說一句,服務也有所有者(關於@weismat評論)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM