使用C#.NET開發了一個對文件進行實時監控的Windows 服務,需要記錄文件是由哪個用戶異動的.但是在Windows 服務中使用System.Environment.UserName獲取的是啟動服務的系統帳號
Local Service,如果我使用自己的帳號登錄,怎麼獲取自己的登錄帳號?
在網上查了好多,沒找到解決方式.
服務安裝設定為:
serviceProcessInstaller.Account = ServiceAccount.LocalService;
serviceInstaller.StartType = ServiceStartMode.Automatic;
试试这个
using System.Diagnostics;
using System.Management;static void Main(string[] args)
{
foreach (Process p in Process.GetProcesses())
{
Console.Write(p.ProcessName);
Console.Write("----");
Console.WriteLine(GetProcessUserName(p.Id));
}
Console.ReadKey();
}private static string GetProcessUserName(int pID)
{
string text1 = null;
SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID);
ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1);
try
{
foreach (ManagementObject disk in searcher1.Get())
{
ManagementBaseObject inPar = null;
ManagementBaseObject outPar = null;
inPar = disk.GetMethodParameters("GetOwner");
outPar = disk.InvokeMethod("GetOwner", inPar, null);
text1 = outPar["User"].ToString();
break;
}
}
catch
{
text1 = "SYSTEM";
}
return text1;
}
.NET開發的Windows服務運行後,無法獲取其進程的.
上面的代碼我試過.
应该是取不到吧?
windows 服务程序,在没有任何人登录的时候,服务程序就已经在运行,此时取登录用户名,即使有办法获取,也取不到,因为还没有人登录。
另外,现在操作系统(比如 windows 7)支持同时几个人登录在上面。你觉得你的服务程序应该获取哪个用户呢?
ServiceBase.OnSessionChanged事件,可以獲取登錄時的Session,能不能通過這個獲取呢?
@Aoysme: 现在操作系统(比如 windows 7)支持同时几个人登录在上面。你觉得你的服务程序应该获取哪个用户呢?如果有两个人同时通过远程桌面登录上来,文件发生改变,你怎么判断是哪个人改了文件?
OnSessionChanged 中获取的,应该是 serviceProcessInstaller.Account = ServiceAccount.LocalService , 这个有什么用?
通过进程判断?进程是有用户的
看來的想另外的方式了