WOW64困境(.lnk快捷键)

我使用的是Windows 7(x64)和Delphi 2010。

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

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

有没有解决上述问题,或者我必须等待本地64位delphi可用于此工作?

Solutions Collecting From Web of "WOW64困境(.lnk快捷键)"

我想你应该在调用Wow64DisableWow64FsRedirection之前调用Wow64RevertWow64FsRedirection。

好吧,一个小例子,演示了这个问题。

我使用以下参数调用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 

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

另一个问题,在调用Wow64DisableWow64FsRedirectionShellExecute将不再打开文件夹。

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

从32位体系结构上的32位外壳:

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

从64位架构上的32位外壳:

 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位外壳:

 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 

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