【问题标题】:SHGetSpecialFolderPath, how to access 64bit CSIDL from 32bit applicationSHGetSpecialFolderPath,如何从 32 位应用程序访问 64 位 CSIDL
【发布时间】:2009-08-20 10:38:26
【问题描述】:

在 64 位系统上运行的 32 位应用程序是否可以访问 64 位应用程序的默认文件夹?

例如,在 32 位应用程序中使用带有 CSIDL_PROGRAM_FILES 的 SHGetSpecialFolderPath 会返回“C:\Program Files (x86)” 如果从 64 位应用程序中使用相同的调用,我会得到“C:\Program Files”。从 32 位应用程序获取“C:\Program Files”的方法?

这里的一个相关问题对SHGetFolderPath() 32 bit vs 64 bit 没有帮助,在调用 SHGetSpecialFolderPath 之前抑制 wow64 文件系统重定向也没有帮助

【问题讨论】:

    标签: windows 64-bit win64 wow64


    【解决方案1】:

    回答我自己的问题,似乎使用 SHGetSpecialFolderPath 是不可能的。在 Vista 及更高版本中,使用替换函数 SHGetKnownFolderPath 允许它使用 FOLDERID_ProgramFilesX64

    【讨论】:

    • 请参阅 Known Folders 上的 MSDN 文章
    • FOLDERID_ProgramFilesX64 如果应用程序在 64 位操作系统上是 32 位,则不起作用。但是,环境变量“ProgramFiles”有效。
    【解决方案2】:

    我相信拥有单独文件夹的全部原因是为了防止 32 位和 64 位应用程序混合使用。因此,您不需要从您的应用程序中查看属于不同位数的文件夹。

    您可能有一个很好的理由,但我在您的问题中没有看到任何已发布的理由。

    【讨论】:

    • 适用于需要在 32 位和 64 位系统上为 32 位和 64 位应用程序执行安装相关任务的 32 位应用程序。所有系统都需要使用完全相同的二进制文件(否则我们可以简单地重新编译)。不幸的是,这不是我们可以更改的要求
    • 当微软试图隐藏所有这些东西并破解这些东西时,他们真的搞砸了。获得 64 位 Program Files forlder 的明显原因是要找到 64 位程序! IE。你可能想运行它。 32 位程序没有理由不能访问此文件夹。也没有理由甚至应该有一个单独的 Program Files 文件夹,但这个错误已成为过去。
    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2012-02-02
    相关资源
    最近更新 更多