gpt4 book ai didi

32bit-64bit - 32位应用程序如何在Windows Vista 64位上找到64位Program Files目录的位置?

转载 作者:行者123 更新时间:2023-12-04 07:30:04 25 4
gpt4 key购买 nike

我正在为如何从32位应用程序确定64位Windows Vista上64位Program Files目录的位置而苦苦挣扎。
调用SHGetKnownFolderPath(FOLDERID_ProgramFilesX64)不会返回任何内容。 MSDN文章KNOWNFOLDERID还指出,对于32位应用程序,不支持使用FOLDERID_ProgramFilesX64进行此特定调用。
我想尽可能避免对“C:\Program Files”的路径进行硬编码。
做类似GetWindowsDirectory()的事情,从返回值中提取驱动器并在其中添加“\Program Files”也没有吸引力。
32位应用程序如何从64位Windows Vista中正确获取文件夹的位置?
背景
我们的应用程序具有一个服务组件,该组件应该根据特定于用户 session 的组件的请求启动其他进程。启动的应用程序可以是32位或64位。我们通过从启动用户 session 过程传入 token 来通过CreateProcessAsUser()做到这一点。为了调用CreateProcessAsUser,我们通过CreateEnvironmentBlock() API创建了一个环境块。问题是CreateEnvironmentBlock()使用用户 session 应用程序的 token 创建了带有ProgramW6432 =“C:\Program Files(x86)”的块,这对于64位应用程序是一个问题。我们需要用适当的值覆盖它。

最佳答案

如前所述,从32位应用程序使用SHGetKnownFolderPath将无法在64位操作系统上使用。这是因为Wow64仿真有效。

但是,您可以使用RegOpenKeyEx传递标志KEY_WOW64_64KEY,然后从注册表中读取程序文件目录。

注册表中的位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion



您对字符串值感兴趣:

ProgramFilesDir

关于32bit-64bit - 32位应用程序如何在Windows Vista 64位上找到64位Program Files目录的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com