【问题标题】:In Windows Vista and 7, I can't access the %DEFAULTUSERPROFILE% system variable - it shows as not found在 Windows Vista 和 7 中,我无法访问 %DEFAULTUSERPROFILE% 系统变量 - 它显示为未找到
【发布时间】:2010-05-25 18:12:28
【问题描述】:

如果我尝试从“运行...”对话框访问此系统变量,Windows 会告诉我该目录不存在。一些系统变量,如 %SYSTEMROOT% 和 %USERPROFILE%,确实有效。因此,如果我尝试在 C# 中使用假定不存在的变量,例如 %DEFAULTUSERPROFILE% 或 %PROFILESFOLDER%,我将一无所获。要访问这些变量,我需要做些什么特别的事情吗?

【问题讨论】:

  • 鉴于%DEFAULTUSERPROFILE%只在创建新用户时使用,你为什么要它?
  • 就此而言,您确定这是系统变量吗?我在 Windows XP SP3 的 cmd 上看不到它,尝试运行它会导致错误。
  • R. Bemrose:我在这里使用 MS 的环境变量列表:technet.microsoft.com/en-us/library/dd560744%28WS.10%29.aspx

标签: c# windows-7 windows-vista environment-variables


【解决方案1】:

你试过%ALLUSERSPROFILE%吗?

【讨论】:

  • 出于某种莫名其妙的原因,指向 C:\ProgramData。我需要指向 C:\Users\Default\AppData。我可以从注册表中获取配置文件目录,但出于某种原因,这似乎是个坏主意。
  • ALLUSERSPROFILE 是所有用户的共享数据,默认配置文件是新用户配置文件的基础
【解决方案2】:

我需要指出 C:\Users\Default\AppData。

你确定吗?请注意,此文件夹用于为添加到系统的每个新用户填充初始 AppData 目录。

如果您想要 .NET 中的实际共享应用程序数据目录,可以这样:

String commonAppData = Environment.GetFolderPath(Environment.SpecialFolders.CommonApplicationData)

【讨论】:

  • 嗯,我正在做的是制作一个应用程序来将游戏添加到游戏资源管理器中。似乎如果游戏没有自己的 GDF.dll(这是我目前计划使应用程序运行的方式),则必须通过 \Users\$username\AppData\Local\ 中的快捷方式引用游戏Microsoft\Windows\GameExplorer\ 或 \Users\Default\...
【解决方案3】:

我的建议是直接从注册表中检索该值 - 以防您无法扩展它:

public static string GetDefaultUserProfilePath() {
    string path = System.Environment.GetEnvironmentVariable("DEFAULTUSERPROFILE") ?? string.Empty;
    if (path.Length == 0) {
        using (Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList")) {
            path = (string)key.GetValue("Default", string.Empty);
        }
    }
    return path;
}

【讨论】:

  • 不要直接在注册表中寻找具有标准 API 的东西。你只会让 Raymond Chen 更加头疼。
  • 那行得通 - 谢谢!我仍然想知道为什么technet.microsoft.com/en-us/library/… 中列出的所有环境变量都不起作用,但我现在将使用注册表项。
【解决方案4】:

您提到 C# - 您不能在 C# 路径字符串中使用环境变量,您需要使用 System.Environment 替换它们。

System.Environment.GetEnvironmentalVariable("USERPROFILE");

我之前没见过%DefaultUserProfile% - 它应该指向安装的第一个用户名吗?

【讨论】:

  • %DefaultUserProfile%,据微软称,指向 HKLM\Micrsoft Windows NT\CurrentVersion\ProfileList [Default]
【解决方案5】:

使用 CSIDL_PROFILE 和 -1 作为令牌参数调用 SHGetFolderLocation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多