7

我查看了 Environment.GetFolderPath 方法和 System.Environment.SpecialFolder 枚举,但我看不到任何返回 Default Users 文件夹路径的内容。

有人可以告诉我如何以编程方式获取默认用户文件夹(或者更好的是默认用户 AppData 本地文件夹路径,例如 c:\users\Default\AppData\Local),因为我需要将一些文件复制到这个文件夹中?

谢谢

4

3 回答 3

6

网上有很多文章描述了如何更改默认用户配置文件路径:

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

我发现这个页面来获取系统驱动器: 如何获取当前的 Windows 目录,例如 C# 中的 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

我使用反射器查看,Environment.GetFolderPath然后查看通过将 -1 作为 hTokenSHGetFolderPath传递指定的内容,而不是获取默认用户。

于 2013-06-14T11:38:30.713 回答
0

您不能因为对该文件夹的访问被拒绝,该文件夹仅供 Microsoft 使用。我确定 Environment 或任何其他类不会为您提供此类功能。这只能通过某种黑客攻击来完成?

于 2013-06-14T12:23:00.830 回答