在 Win64 OS 中解析来自 32 位应用程序的 PROGRAMFILES 变量?
Resolve PROGRAMFILES variable from 32bit app in Win64 OS?
如 MSDN 的 WOW64 Implementation Details 中所述,变量 %PROGRAMFILES%
、
在 64 位 Windows OS 上的 32 位进程中,解析为 C:\Program Files (x86)
在 64 位 Windows OS 上的 64 位进程中,解析为 C:\Program Files
您可以验证这一点,例如使用 Delphi 10.1 程序,使用 32 位 Windows 目标平台和 64 位 Windows 目标平台编译:
MyShellExecute('%PROGRAMFILES%');
因此,从在 Windows-64 位-OS 中执行的 32 位 Delphi 应用程序,我怎样才能同时获得:
32 位程序的 ProgramFiles 目录 (C:\Program Files (x86)
)
64 位程序的 ProgramFiles 目录 (C:\Program Files
)
使用以下环境变量:
ProgramW6432
获取64位程序文件目录
ProgramFiles(x86)
获取32位程序文件目录
这些 return 在 32 位和 64 位进程中具有相同的值。
当然,依赖环境变量总是有点脆弱。您的父进程总是可以在创建您的进程之前修改这些变量。
为了使您的程序更健壮,您应该改用 known folder IDs。使用 FOLDERID_ProgramFilesX64
和 FOLDERID_ProgramFilesX86
.
如 MSDN 的 WOW64 Implementation Details 中所述,变量 %PROGRAMFILES%
、
在 64 位 Windows OS 上的 32 位进程中,解析为
C:\Program Files (x86)
在 64 位 Windows OS 上的 64 位进程中,解析为
C:\Program Files
您可以验证这一点,例如使用 Delphi 10.1 程序,使用 32 位 Windows 目标平台和 64 位 Windows 目标平台编译:
MyShellExecute('%PROGRAMFILES%');
因此,从在 Windows-64 位-OS 中执行的 32 位 Delphi 应用程序,我怎样才能同时获得:
32 位程序的 ProgramFiles 目录 (
C:\Program Files (x86)
)64 位程序的 ProgramFiles 目录 (
C:\Program Files
)
使用以下环境变量:
ProgramW6432
获取64位程序文件目录ProgramFiles(x86)
获取32位程序文件目录
这些 return 在 32 位和 64 位进程中具有相同的值。
当然,依赖环境变量总是有点脆弱。您的父进程总是可以在创建您的进程之前修改这些变量。
为了使您的程序更健壮,您应该改用 known folder IDs。使用 FOLDERID_ProgramFilesX64
和 FOLDERID_ProgramFilesX86
.