在 Windows Vista 和 7 中,我无法访问 %DEFAULTUSERPROFILE% 系统变量 - 它显示为未找到

发布于 2024-09-03 06:48:58 字数 195 浏览 2 评论 0原文

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

If I try to access this system variable from the Run... dialog, Windows tells me the directory doesn't exist. Some system variables, like %SYSTEMROOT% and %USERPROFILE%, do work. Consequently, if I try to use a supposedly nonexistent variable like %DEFAULTUSERPROFILE% or %PROFILESFOLDER% in C#, I get nothing in return. Is there something special I need to do to get access to these variables?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

猫七 2024-09-10 06:48:58

您尝试过%ALLUSERSPROFILE%吗?

Have you tried %ALLUSERSPROFILE%?

拿命拼未来 2024-09-10 06:48:58

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

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

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

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

I need to point to
C:\Users\Default\AppData.

Are you sure? Be aware that this folder is used to populate the inital AppData directory for each new user added to the system.

If you want the actual shared application data directory in .NET, it's this:

String commonAppData = Environment.GetFolderPath(Environment.SpecialFolders.CommonApplicationData)
逆光飞翔i 2024-09-10 06:48:58

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

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;
}

My suggestion is to retreive that value directly from the registry - in case you can't expand it:

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;
}
烟雨扶苏 2024-09-10 06:48:58

您提到 C# - 您不能在 C# 路径字符串中使用环境变量,您需要使用 系统.环境

System.Environment.GetEnvironmentalVariable("USERPROFILE");

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

You mention C# - you can't use environment variables inside C# path strings, you need to replace them using System.Environment.

System.Environment.GetEnvironmentalVariable("USERPROFILE");

I haven't seen %DefaultUserProfile% before - should it point to the first username that was installed?

GRAY°灰色天空 2024-09-10 06:48:58

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

Call SHGetFolderLocation with CSIDL_PROFILE and -1 as the token parameter

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文