2010-11-24 98 views
0

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

虽然我不确定要从哪里出发。为什么这个电话打破了?为什么不改变env-var只是指向其他地方的用户目录? (我试图让cabal从闪存驱动器干净地工作。)

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

+0

作为一个说明,我找到了通过Cabal的这张票的违规方法调用:http://hackage.haskell.org/trac/hackage/ticket/709无论在SHGetFolderPath下发生什么都可能有助于解决这个问题。 – CodexArcanum 2010-11-24 21:52:08

回答

1

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

%USERPROFILE%和类似的环境变量是由命令行处理程序提供的,用于编写批处理文件,因此您可以直接从脚本获取这些位置。更改环境变量只会影响脚本,或者一个罕见的应用程序检查变量,而不是使用SHGetSpecialFolderPath或类似的函数(这是Win32应用程序推荐的方法)。

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

相关问题