2017-02-06 214 views
-2

我有用戶調用'amsd',路徑是'C:\ Users \ amsd'。之後,我將用戶名更改爲「其他」。但路徑並未改變,其名稱與以前相同。但是現在我想要做的是,我需要從當前用戶訪問該路徑。讓我們假設我只知道用戶名(其他)而不知道路徑變量名(c:\ users \ amsd)。但我需要訪問該路徑。我怎樣才能做到這一點。我試過System.Environment.GetEnvironmentVariable("other"); 但是它的空白值爲如何獲取環境變量名稱

+0

你所說的「更改用戶名」是什麼意思?你是否改變登錄用戶或只有他的名字?你想要當前登錄用戶(執行你的應用程序的用戶)或給定用戶名的配置文件路徑嗎? –

+1

您可以通過P/Invoke調用[GetUserProfileDirectory](https://msdn.microsoft.com/library/windows/desktop/bb762280(v = vs.85).aspx)。但是,您必須傳遞一個用戶句柄,這會要求您實際以該用戶身份進行身份驗證,即輸入密碼。似乎只有用戶名或SID才能做到這一點。您也許可以枚舉'C:\ Users'的子文件夾並查看它們的ACL以確定哪一個屬於所討論的用戶。 – Joey

+0

@Joey在c#中做了與此相關的任何代碼。我搜索了這種方法,但我在C++中發現了代碼。或者你可以提到一些鏈接 – Mehdi

回答

0

我有用戶名。所以我做的是將我的用戶名作爲參數傳遞給NTAccount構造函數並獲取用戶的sid。下面是代碼。

NTAccount f = new NTAccount(username); 
SecurityIdentifier s = (SecurityIdentifier)f.Translate(typeof(SecurityIdentifier)); 
string sid = s.ToString(); 

之後,使用該sid我通過讀取註冊表中的值使用下面的路徑獲取配置文件夾。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\sid 

該路徑下有關鍵的呼叫profileimagepath那裏我能得到用戶配置文件拍拍