首页 文章

WOW64困境(.lnk快捷方式)

提问于
浏览
4

我正在使用Windows 7(x64)和Delphi 2010 .

我正在编写一个模拟开始菜单的组件 . 但是,我遇到了以下问题:

  • 如果我尝试使用 ShellExecute 打开快捷方式(.lnk文件),只要%ProgramFiles%是快捷方式的目标路径的一部分,它就会失败(然后它会查看C:\ Program Files(x86)文件夹而不是C:\ Program Files);
    如果%ProgramFiles%是图标文件路径的一部分,则
  • ShGetFileInfo 无法在系统映像列表中提取正确的图标索引(与上述问题相同) .

对于上述问题是否有任何解决方法,或者我是否必须等待本机64位Delphi才能使用?

3 回答

  • 1

    我想你应该先拨打Wow64DisableWow64FsRedirection,然后再拨打Wow64RevertWow64FsRedirection .

  • 1

    好的,一个证明问题的小例子 .

    我使用以下参数调用ShellExecute:

    ShellExecute(Handle, 'open', 'C:\Users\...\Internet Explorer (64-bit).lnk', nil, nil, SW_SHOWNORMAL);
    

    Internet Explorer(64位).lnk的目标是:

    C:\Program Files\Internet Explorer\iexplore.exe
    

    但是,仍然打开了32位版本的iexplore.exe . 在这种情况下,路径甚至不使用%ProgramFiles%,因此不知何故 ShellExecute 将在内部将C:\ Program Files转换为C:\ Program Files(x86) . 我不知道如何让它打开64位版本的iexplore.exe .

    另一个问题是,在调用 Wow64DisableWow64FsRedirection 后, ShellExecute 将不再打开文件夹 .

  • 2

    以下环境变量将始终指向64位计算机上的正确方向,并且将在32位计算机上未定义:

    来自32位架构上的32位shell:

    C:\>echo %processor_architecture%
    x86
    C:\>echo %programfiles(x86)%
    %programfiles(x86)%
    C:\>echo %programw6432%
    %programw6432%
    C:\>echo %programfiles%
    C:\Program Files
    

    来自64位架构上的32位shell:

    C:\>echo %processor_architecture%
    x86
    C:\>echo %programfiles(x86)%
    C:\Program Files (x86)
    C:\>echo %programw6432%
    C:\Program Files
    C:\>echo %programfiles%
    C:\Program Files (x86)
    

    从64位shell:

    C:\>echo %processor_architecture%
    AMD64
    C:\>echo %programfiles(x86)%
    C:\Program Files (x86)
    C:\>echo %programw6432%
    C:\Program Files
    C:\>echo %programfiles%
    C:\Program Files
    

    在运行应用程序之前尝试替换它们 .

相关问题