在 Win64 OS 中解析来自 32 位应用程序的 PROGRAMFILES 变量?

Resolve PROGRAMFILES variable from 32bit app in Win64 OS?

如 MSDN 的 WOW64 Implementation Details 中所述,变量 %PROGRAMFILES%

您可以验证这一点,例如使用 Delphi 10.1 程序,使用 32 位 Windows 目标平台和 64 位 Windows 目标平台编译:

MyShellExecute('%PROGRAMFILES%');

因此,从在 Windows-64 位-OS 中执行的 32 位 Delphi 应用程序,我怎样才能同时获得:

使用以下环境变量:

  • ProgramW6432获取64位程序文件目录
  • ProgramFiles(x86)获取32位程序文件目录

这些 return 在 32 位和 64 位进程中具有相同的值。

当然,依赖环境变量总是有点脆弱。您的父进程总是可以在创建您的进程之前修改这些变量。

为了使您的程序更健壮,您应该改用 known folder IDs。使用 FOLDERID_ProgramFilesX64FOLDERID_ProgramFilesX86.