代码之家  ›  专栏  ›  技术社区  ›  CodexArcanum

为什么更改%userprofile%会导致shgetfolderpath sidl_appdata失败?

  •  0
  • CodexArcanum  · 技术社区  · 14 年前

    我正在尝试调试cabal的一个问题,如果在运行它之前更改%userprofile%环境变量的值,它将无法工作。我似乎已经追踪到了错误的来源是win32调用shgetfolderpath指向sidl_appdata,如果修改了这个变量,这个调用就会失败。

    不过,我不太确定从这里到哪里去。为什么那个电话断了?为什么不更改env var只将用户目录指向其他地方?(我正试图让卡巴从闪存驱动器中干净地工作。)

    在同一主题上,使用sidl_profile调用同一个函数会返回我的实际(登录)用户目录(c:/docs and settings/me),即使运行ghci的控制台具有我可以在其中找到的每个env var,但它会重置为闪存驱动器。这些win32调用是否完全忽略环境变量?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Alberto Martinez    14 年前

    Win32函数不为此使用环境变量,该信息存储在其他位置。确切的位置并不重要,因为微软考虑到了实现的细节,所以它可以从一个版本更改为另一个版本。( The long and sad story of the Shell Folders key )

    %USERPROFILE% 命令行处理器提供了类似的环境变量,作为编写批处理文件的一种礼节,因此您可以直接从脚本中获取这些位置。更改环境变量只会影响脚本,或很少会检查变量而不是使用的应用程序 SHGetSpecialFolderPath 或类似的函数(这是Win32应用程序的推荐方法)。

    长话短说:不能根据每个应用程序更改用户文件夹的位置。

    推荐文章