Kar*_*yan 8 vista64 32bit-64bit
我正在努力解决如何从32位应用程序确定64位Windows Vista上64位Program Files目录的位置的问题.
要求SHGetKnownFolderPath(FOLDERID_ProgramFilesX64)不要退货.该MSDN文章KNOWNFOLDERID还指出,与此特定的呼叫FOLDERID_ProgramFilesX64不支持32位应用程序.
我想尽可能避免硬编码"C:\ Program Files"的路径.做一些事情GetWindowsDirectory(),从返回值中提取驱动器并向其添加"\ Program Files"也不具吸引力.
32位应用程序如何从64位Windows Vista正确获取文件夹的位置?
我们的应用程序有一个服务组件,它应该根据来自用户会话的组件的请求启动其他进程.启动的应用程序可以是32位或64位.我们通过CreateProcessAsUser()从启动用户会话进程传入令牌来实现此目的.对于调用CreateProcessAsUser,我们通过CreateEnvironmentBlock()API 创建一个环境块.问题是CreateEnvironmentBlock(),使用用户会话应用程序的令牌,使用ProgramW6432 ="C:\ Program Files(x86)"创建一个块,这对于64位应用程序来说是一个问题.我们需要用适当的值覆盖它.
如前所述,使用32位应用程序中的SHGetKnownFolderPath将无法在64位操作系统上运行.这是因为Wow64仿真有效.
但是,您可以使用RegOpenKeyEx传入标志KEY_WOW64_64KEY,然后从注册表中读取程序文件目录.
注册表中的位置:
HKEY_LOCAL_MACHINE\SOFTWARE \微软\的Windows\CurrentVersion
您对字符串值感兴趣:
ProgramFilesDir的
| 归档时间: |
|
| 查看次数: |
5778 次 |
| 最近记录: |