2017-02-06 212 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那里我能得到用户配置文件拍拍