2017-02-06 6 views
-2

私は 'C:\ Users \ amsd'であるユーザコール 'amsd'を持っています。その後、ユーザー名を「その他」に変更しました。しかし、パスは変更されていない、その名前は以前と同じです。しかし、今私がしようとしていることは、私は現在のユーザーからそのパスにアクセスする必要があるということです。私は、パス変数名(c:\ users \ amsd)ではなく、ユーザー名(other)だけを知っていると仮定します。しかし、私はその道にアクセスする必要があります。どうやってやるの。私は試しましたSystem.Environment.GetEnvironmentVariable("other"); しかし、その再入力null値環境変数を取得する方法名前

+0

を得ることができますがありますか?ログオンしているユーザーまたは彼の名前だけを変更しますか?現在ログオンしているユーザー(アプリケーションを実行するユーザー)または指定したユーザー名のプロファイルパスが必要ですか? –

+1

P/Invoke経由で呼び出せる[GetUserProfileDirectory](https://msdn.microsoft.com/library/windows/desktop/bb762280(v = vs.85).aspx)があります。しかし、実際にそのユーザーとして認証する、つまりパスワードを入力する必要があるユーザーハンドルを渡す必要があります。ユーザー名やSIDだけでこれを行う方法はないようです。おそらく 'C:\ Users'のサブフォルダを列挙し、それらのACLを調べて問題のユーザに属する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は、私はあなたが「ユーザー名を変更した」とはどういう意味ですかユーザープロファイルパット

関連する問題