2

由于我在MSDN 文档中找不到任何明确说明的内容:ProgramFilesX86枚举值在 32 位系统上返回什么?


开发环境

请注意:在我的组织中,当我想测试事物时,我不能只是站起来机器。这就是我问社区的原因。我什至无法访问 32 位 ISO 来构建虚拟机——所以请理解我在这个组织内部有一些限制。

  • Windows 7 64 位

生产环境

在生产中,我不知道他们运行的是 32 位还是 64 位系统,很可能是混合的。但是我确实知道操作系统列表。

  • Windows 7的
  • 视窗
  • 视窗

客观的

获取正确的程序文件目录,以便我可以动态启动我的应用程序。

已知变量

  1. 该应用程序使用 MSI 安装,并且将使用默认选项安装,因此将安装在Program Files目录中。
  2. 该应用程序是 32 位应用程序,因此在 64 位系统上它将使用该Program Files (x86)文件夹,但在 32 位系统上它将使用标准Program Files目录。

谢谢大家!

4

4 回答 4

21

32 位 XP:空字符串 :(
32 位 Vista:“C:\Program Files”
32 位 Win7:未测试,可能与 Vista
64 位 Win7:“C:\Program Files (x86)”相同

不确定64位XP,我自己很好奇。

于 2013-01-14T20:39:00.987 回答
3

备注部分KNOWNFOLDERID包含一个方便的表格,为您提供所需的信息(从非托管的角度)。在这里重现它很棘手:

OS      App     KNOWNFOLDERID               Default                             CSIDL
32 bit  32 bit  FOLDERID_ProgramFilesX86    %SystemDrive%\Program Files         CSIDL_PROGRAM_FILESX86
64 bit  64 bit  FOLDERID_ProgramFilesX86    %SystemDrive%\Program Files (x86)   CSIDL_PROGRAM_FILESX86
64 bit  32 bit  FOLDERID_ProgramFilesX86    %SystemDrive%\Program Files (x86)   CSIDL_PROGRAM_FILESX86
于 2012-12-18T15:41:00.567 回答
1

它返回“程序文件”。由于您使用 MSI 进行安装,您可能会考虑使用安装程序 API(MsiLocateComponent 等)来定位您的程序,而不是假设它位于预期位置。

于 2012-12-18T15:33:28.123 回答
1

在我的 Win 7 32 位系统上ProgramFilesX86返回C:\Program Files(没有斜杠)。

Console.WriteLine("GetFolderPath: {0}", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86));
于 2012-12-18T15:35:07.770 回答