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

时间:2017-10-11 14:46:34

标签: delphi delphi-10.1-berlin system-variable

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

  • 在64位Windows操作系统上的32位进程中,解析为C:\Program Files (x86)

  • 在64位Windows操作系统上的64位进程中,解析为C:\Program Files

你可以验证这个,例如使用Delphi 10.1程序,使用32位Windows目标平台和64位Windows目标平台进行编译:

MyShellExecute('%PROGRAMFILES%');

因此,从Windows-64bit-OS中执行的32位Delphi应用程序,我怎么能得到两个:

  • 32位程序的ProgramFiles目录(C:\Program Files (x86)

  • 64位程序的ProgramFiles目录(C:\Program Files

1 个答案:

答案 0 :(得分:6)

使用以下环境变量:

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

它们在32位和64位进程中返回相同的值。

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

为了使您的程序更加强大,您应该使用known folder IDs。使用FOLDERID_ProgramFilesX64FOLDERID_ProgramFilesX86