2011-04-05 77 views
0

我的程序是從運行於Local System Account(真實用戶已登錄)的服務啓動的。該程序的任務之一是在網絡路徑上存儲文件,該文件應包含當前用戶名,例如\\server\\storage\\%username%,但問題是,我得到的系統帳戶而不是用戶帳戶的名字,當我讀到的環境變量:從以本地系統帳戶啓動的程序獲取當前用戶名

Environment.GetEnvironmentVariable("username"); 

是否有一種方式來獲得在這種情況下正確的用戶名?

回答

1

我的解決辦法是找出哪個用戶啓動Explorer進程:

private static string GetExplorerUser() 
{ 
    var process = Process.GetProcessesByName("explorer"); 
    return process.Length > 0 
     ? GetUsernameByPid(process[0].Id) 
     : "Unknown-User"; 
} 

private static string GetUsernameByPid(int pid) 
{ 
    var query = new ObjectQuery("SELECT * from Win32_Process " 
     + " WHERE ProcessID = '" + pid + "'"); 

    var searcher = new ManagementObjectSearcher(query); 
    if (searcher.Get().Count == 0) 
     return "Unknown-User"; 

    foreach (ManagementObject obj in searcher.Get()) 
    { 
     var owner = new String[2]; 
     obj.InvokeMethod("GetOwner", owner); 
     return owner[0] ?? "Unknown-User"; 
    } 

    return "Unknown-User"; 
} 

另一種可能性是解析的輸出:

如果引用的.NET System.Management

只會工作命令qwinsta

0

如果您沒有采取任何措施以不同的用戶身份啓動您的程序(CreateProcessAsUser等),那麼它將以與調用程序相同的用戶身份運行。

相關問題