Bạn sẽ cần thêm tham chiếu vào System.Management.dll để làm việc này.
Đây là những gì tôi đã sử dụng. Nó hoạt động trong .NET 3.5:
using System.Linq;
using System.Management;
class Program
{
/// <summary>
/// Adapted from https://www.codeproject.com/Articles/14828/How-To-Get-Process-Owner-ID-and-Current-User-SID
/// </summary>
public static void GetProcessOwnerByProcessId(int processId, out string user, out string domain)
{
user = "???";
domain = "???";
var sq = new ObjectQuery("Select * from Win32_Process Where ProcessID = '" + processId + "'");
var searcher = new ManagementObjectSearcher(sq);
if (searcher.Get().Count != 1)
{
return;
}
var process = searcher.Get().Cast<ManagementObject>().First();
var ownerInfo = new string[2];
process.InvokeMethod("GetOwner", ownerInfo);
if (user != null)
{
user = ownerInfo[0];
}
if (domain != null)
{
domain = ownerInfo[1];
}
}
public static void Main()
{
var processId = System.Diagnostics.Process.GetCurrentProcess().Id;
string user;
string domain;
GetProcessOwnerByProcessId(processId, out user, out domain);
System.Console.WriteLine(domain + "\\" + user);
}
}
Nguồn
2017-10-18 18:12:44
https://social.msdn.microsoft.com/Forums/vstudio/en-US/aeff7e41-a4ba-4bf0-8677-81162040984d/retrieving-username-of-a -running-process? forum = netfxbcl – TomO
Đã kiểm tra điều đó. Vấn đề là nó nhận được tên người dùng cho một phiên. Và nếu tôi mở 2 cửa sổ CMD với 2 người dùng khác nhau, cả hai đều có cùng một ID phiên (2). Và cả hai giải quyết cho cùng một người dùng, đó là sai. Taskmanager hiển thị chúng một cách chính xác. – Wolf5
Tôi đã được đi từ vấn đề này cho một chút, nhưng họ sẽ không có ProcID khác nhau? Không thể nhớ những gì nó trả về, nhưng chỉ suy nghĩ to ở đây. – TomO