2013-07-28 31 views
0

我使用C#和.NET 3.5獲取登錄的用戶名,激活與

我的目標在這裏的過程是採取登錄的用戶名和簡單說下這個用戶名啓動一個進程。通常一個簡單的Process.Start(pathToProgram)在這裏會有所幫助,但問題是我從安裝程序類調用此行,這意味着msiexec目前正在工作,並且我得到的用戶名是SYSTEM,而不是當前登錄到Windows的實際用戶。

當然,Environment.UserName也返回「SYSTEM」而不是登錄的用戶。

如何以登錄用戶身份啓動進程而不是用戶SYSTEM?

+0

現在不能測試,但你嘗試調用'Environment.GetEnvironmentVariable(「USERNAME」);'?它與您的特定環境中的Environment.UserName不同? – Steve

+0

沒有「登錄的用戶」這樣的東西。請記住,Windows是一個多用戶操作系統。可能沒有用戶登錄,一個用戶,多個用戶,多個*遠程*用戶以及上述任意組合。因此,您需要更清楚地定義「登錄用戶」的含義以及您希望如何處理這些其他情況。 –

+0

登錄的用戶是在Windows登錄屏幕中輸入了他的名字和密碼的用戶名 –

回答

0

我認爲,當你調用Environment.UserName您獲得通過模擬的用戶價值當前進程,而如果你打電話給Environment.GetEnvironmentVariable("USERNAME"),你會得到啓動進程的用戶的名字,那時進程沒有啓動,並且coure還沒有模擬另一個用戶。

但是,這只是一個似乎適用於OP問題的原始思想,但我仍在搜索一些參考資料以確認我的斷言。
我歡迎任何一個更好地理解這個事實,並解釋它比我更好

+0

也許你想嘗試獲得另一個正確的答案,以解決後續問題I已得到: http://stackoverflow.com/questions/17908993/starting-a-process-with-a-user-name-and-password –

0

你可以登錄的用戶喜歡本作目前的用戶名 -

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

SO post -

Process p = new Process(); 
p.StartInfo.FileName = "C:\SetupVM.bat"; 
p.StartInfo.UserName = userName; 
p.StartInfo.Password = "AdminPassword"; 
p.Start(); 
p.WaitForExit(); 
+0

我該如何使用它來運行我獲得的信息的過程? –

+0

'Process.Start(pathToProgram')將只啓動當前登錄用戶的進程,不是嗎? –

+0

它將以運行該命令的用戶身份啓動進程,因爲它在安裝程序期間運行這個命令是SYSTEM,而不是登錄的用戶 –