我正在尝试使用Cabal调试问题,如果我在运行它之前更改%USERPROFILE%环境变量的值,它将无效。我似乎已经将错误追溯到指向SIDL_APPDATA的win32调用sHGetFolderPath,如果该变量被修改,它似乎失败。
我不确定从哪里开始。为什么这个电话会破坏?为什么不改变env-var只是将用户目录指向别处? (我正试图让cabal从闪存驱动器中干净地工作。)
在同一主题上,使用SIDL_PROFILE调用相同的函数会返回我的实际(登录)用户目录(C:/ Docs和Settings / Me),即使运行GHCi的控制台有我可以找到的每个env-var其中的用户目录重置为闪存驱动器。那些Win32调用是否完全忽略了环境变量?
答案 0 :(得分:1)
Win32函数不使用环境变量,该信息存储在其他位置。确切的位置并不重要,因为Microsoft考虑了实现细节,因此它可以从版本更改为版本(The long and sad story of the Shell Folders key)。
%USERPROFILE%
和类似的环境变量由命令行处理器提供,作为编写批处理文件的礼貌,因此您可以直接从脚本获取这些位置。更改环境变量只会影响脚本,或者是一个罕见的应用程序,它会检查变量而不是使用SHGetSpecialFolderPath
或类似的函数(这是Win32应用程序的推荐方法)。
长篇文章排序:您不能在每个应用程序的基础上更改用户文件夹的位置。