【问题标题】:All users path?所有用户路径?
【发布时间】:2010-12-26 12:35:39
【问题描述】:

在 C# 中,我可以执行以下操作:

DirectoryInfo di = new DirectoryInfo(System.Environment.GetEnvironmentVariable("ALLUSERSPROFILE"));

这将为我提供所有用户个人资料的路径。

在 C++ 中,我可以使用 SHGetFolderPath,但它似乎没有适用于所有用户的 CSLID。 是否有一个等值函数可以将 %ALLUSERSPROFILE% 吹到它的路径值?

【问题讨论】:

    标签: c++ winapi path


    【解决方案1】:

    使用ExpandEnvironmentStrings 扩展%ALLUSERSPROFILE% 字符串。此方法是Kernel32.dll 的一部分。

    【讨论】:

    【解决方案2】:

    您可以使用getenv CRT 函数来获取 ALLUSERSPROFILE 环境变量的值,其方式与使用 C# 的方式大致相同。

    【讨论】:

      【解决方案3】:

      SHGetFolderPathCSIDL_COMMON_APPDATA 一起使用。或者SHGetKnownFolderPath,因为Vista和FOLDERID_ProgramData

      或者,使用 .NET 本机 Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

      【讨论】:

      • CSIDL_COMMON_APPDATA 在我的 XP 机器上返回 C:\Documents and Settings\All Users\Application Data,而 ALLUSERSPROFILE 指向 C:\Documents and Settings\All Users。 ALLUSERSPROFILE 是否总是 CSIDL_COMMON_APPDATA 的父级?
      • ALLUSERSPROFILE 在 WinXP 上是 All Users\Application Data。在 Vista 上它等于 C:\ProgramData
      • 好点;您不能假设存在诸如“ 目录包含整个“所有用户”配置文件”之类的东西,或者至少我不知道有任何说明这一点的文档。跨度>
      【解决方案4】:

      在大多数情况下,您应该能够将SHGetFolderPathCSIDL_COMMON_... 值之一一起使用(完整列表请参阅here)来获取您感兴趣的所有用户路径的子目录.(对于 Windows Vista 及更高版本,您可以将SHGetKnownFolderPathFOLDERID_Public... 值之一一起使用;请参阅here。)

      【讨论】:

        【解决方案5】:

        请注意,在某些安全情况下,该文件夹甚至可能不是真正的文件夹。没有 CSIDL_,因为它总是强烈暗示你已经走出了人迹罕至的道路。

        您确定使用 _APPDATA 不会更好吗?

        【讨论】:

          猜你喜欢
          • 2021-04-19
          • 1970-01-01
          • 2014-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多