0

我正在尝试调试 Cabal 的一个问题,如果我在运行之前更改 %USERPROFILE% 环境变量的值,它将无法工作。我似乎已经将错误追溯到指向 SIDL_APPDATA 的 win32 调用 sHGetFolderPath,如果修改了该变量,这似乎会失败。

我不确定从这里去哪里。为什么这个电话会中断?为什么不更改该 env-var 只是将用户目录指向其他地方?(我正试图让 cabal 从闪存驱动器中干净地工作。)

在同一主题上,使用 SIDL_PROFILE 调用同一函数会返回我的实际(登录)用户目录(C:/Docs and Settings/Me),即使运行 GHCi 的控制台具有我可以在用户目录中找到的每个 env-var在它重置到闪存驱动器。那些 Win32 调用是否完全忽略了环境变量?

4

1 回答 1

1

Win32 函数不为此使用环境变量,该信息存储在其他位置。确切的位置并不重要,因为 Microsoft 考虑了实现细节,因此它可以从一个版本更改为另一个版本(Shell Folders 键的漫长而悲伤的故事)。

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

长篇大论排序:您不能在每个应用程序的基础上更改用户文件夹的位置。

于 2010-11-24T22:59:47.170 回答