C# 在WindowsVista和Windows7中,我可以';t访问%DEFAULTUSERPROFILE%系统变量-它显示为未找到

C# 在WindowsVista和Windows7中,我可以';t访问%DEFAULTUSERPROFILE%系统变量-它显示为未找到,c#,windows-7,windows-vista,environment-variables,C#,Windows 7,Windows Vista,Environment Variables,如果我试图从运行中访问此系统变量。。。对话框中,Windows告诉我该目录不存在。某些系统变量,如%SYSTEMROOT%和%USERPROFILE%,确实有效。因此,如果我试图在C#中使用一个假定不存在的变量,如%DEFAULTUSERPROFILE%或%PROFILESFOLDER%,我将得不到任何回报。要访问这些变量,我需要做些特殊的事情吗?您是否尝试过%ALLUSERSPROFILE%?我的建议是直接从注册表中检索该值-以防无法扩展: public static string GetDe

如果我试图从运行中访问此系统变量。。。对话框中,Windows告诉我该目录不存在。某些系统变量,如%SYSTEMROOT%和%USERPROFILE%,确实有效。因此,如果我试图在C#中使用一个假定不存在的变量,如%DEFAULTUSERPROFILE%或%PROFILESFOLDER%,我将得不到任何回报。要访问这些变量,我需要做些特殊的事情吗?

您是否尝试过
%ALLUSERSPROFILE%

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

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;
}
提到C#-不能在C#路径字符串中使用环境变量,需要使用替换它们

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

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

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

如果您想要.NET中的实际共享应用程序数据目录,则如下所示:

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

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

鉴于
%DEFAULTUSERPROFILE%
仅在创建新用户时使用,您为什么需要它?就此而言,您确定这是一个系统变量吗?我在WindowsXPSP3的cmd上看不到它,尝试运行它会导致一个错误。R。Bemrose:我在这里使用MS的环境变量列表:出于某种无法解释的原因,它指向C:\ProgramData。我需要指向C:\Users\Default\AppData。我可以从注册表中获取profiles目录,但出于某些原因,这似乎是一个坏主意。ALLUSERSPROFILE是所有用户的共享数据,默认配置文件是新用户配置文件的基础不要直接在注册表中翻来覆去试图获取具有标准API的内容。你只会给雷蒙德·陈制造更多的麻烦。这奏效了——谢谢!我仍然想知道为什么中列出的所有环境变量都不起作用,但我现在将使用注册表项。%DefaultUserProfile%,根据Microsoft的说法,指向HKLM\Micrsoft Windows NT\CurrentVersion\ProfileList[Default],我正在做的是制作一个将游戏添加到游戏浏览器的应用程序。如果游戏没有自己的GDF.dll(这是我目前计划让应用程序运行的方式),那么游戏必须通过\Users\$username\AppData\Local\Microsoft\Windows\GameExplorer\或\Users\Default\中的快捷方式来引用。。。
String commonAppData = Environment.GetFolderPath(Environment.SpecialFolders.CommonApplicationData)