4

正如 MSDN 的WOW64 实施细节中所解释的,变量%PROGRAMFILES%,

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

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

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

MyShellExecute('%PROGRAMFILES%');

因此,从在 Windows-64 位操作系统中执行的 32 位 Delphi 应用程序中,我怎样才能获得两者:

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

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

4

1 回答 1

8

使用以下环境变量:

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

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

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

为了使您的程序更健壮,您应该改用已知的文件夹 ID。使用FOLDERID_ProgramFilesX64FOLDERID_ProgramFilesX86

于 2017-10-11T15:06:30.587 回答