7

Environment.GetFolderPath メソッドと System.Environment.SpecialFolder 列挙を調べましたが、Default Users フォルダーのパスを返すものは何も表示されませんでした。

いくつかのファイルをこのフォルダーにコピーする必要があるため、プログラムで Default Users フォルダー (またはさらに良い Default Users AppData Local フォルダー パス、たとえば c:\users\Default\AppData\Local) を取得する方法を教えてください。

ありがとうございました

4

3 に答える 3

6

既定のユーザー プロファイル パスを変更する方法を説明する Web 上の記事が多数あります。

http://support.microsoft.com/kb/214636

http://www.nextofwindows.com/how-to-change-user-profile-default-location-in-windows-7/

彼らは皆、現在のデフォルト プロファイル パスが次のレジストリの場所に保存されていると言っています。

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

例: %SystemDrive%\Users\Default

そして、システムドライブを取得するためにこのページを見つけました: How to get current windows directory eg C:\ in C#

Path.GetPathRoot(Environment.SystemDirectory)

だから私はそれを使うつもりです。ご協力いただきありがとうございます。

アップデート

次のコードを試してみたところ、C:\Users\Default が返されます。そのため、レジストリ キーに保存されている %SystemDrive% テキストを置き換える必要はありません。自動的に置き換えます。

using (RegistryKey profileListKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"))
{
    string defaultPath = profileListKey.GetValue("Default").ToString();
}
于 2013-06-14T13:03:34.410 に答える
3

「C:\Users\Default\Desktop」を出力するLINQPad (言語: C# プログラム) のスニペット:

void Main()
{
    GetFolderPath(Environment.SpecialFolder.Desktop).Dump();
}

// Define other methods and classes here
[DllImport("shfolder.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, int hToken, int dwFlags, StringBuilder lpszPath);

public static string GetFolderPath(Environment.SpecialFolder folder)
{
    if (!Enum.IsDefined(typeof(Environment.SpecialFolder), folder))
    {
        throw new Exception("Crap");
    }
    StringBuilder lpszPath = new StringBuilder(260);

    SHGetFolderPath(IntPtr.Zero, (int) folder, -1, 0, lpszPath);
    string path = lpszPath.ToString();
    new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
    return path;
}

編集:LINQPadに次のインポートがありました

System.Runtime.InteropServices
System.Globalization
System.Security.Permissions

リフレクターを使用して確認し、代わりにデフォルト ユーザーを取得する hToken として -1 を渡すことを指定Environment.GetFolderPathすることを確認しました。SHGetFolderPath

于 2013-06-14T11:38:30.713 に答える
0

そのフォルダーへのアクセスが拒否されているため、できません。このフォルダーは Microsoft によってのみ使用されます。Environment や他のクラスがそのような機能を提供しないと確信しています。これは、ある種のハッキングでしかできないのでしょうか?

于 2013-06-14T12:23:00.830 に答える