WOW64困境(.lnk快捷方式)

时间:2010-06-26 15:08:20

标签: windows delphi shortcut shellexecute wow64

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

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

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

    上述问题是否有解决办法,或者我是否必须等待原生的64位Delphi才能使用?

3 个答案:

答案 0 :(得分:2)

我认为您应该在Wow64DisableWow64FsRedirection之前和Wow64RevertWow64FsRedirection之后致电。

答案 1 :(得分: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文件(x86)内部。我不知道如何让它打开64位版本的 iexplore.exe

另一个问题是,在致电Wow64DisableWow64FsRedirection后,ShellExecute将不再打开文件夹。

答案 2 :(得分:1)

以下环境变量将始终指向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

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