我正在使用Windows 7(x64)和Delphi 2010。
我正在编写一个模拟开始菜单的组件。但是,我遇到了以下问题:
ShellExecute
打开快捷方式(.lnk文件),只要%ProgramFiles%是快捷方式的目标路径的一部分,它就会失败(它会看起来在 C:\ Program Files(x86)文件夹而不是 C:\ Program Files ); ShGetFileInfo
无法在系统映像列表中提取正确的图标索引(与上述问题相同)。< / LI>
醇>
上述问题是否有解决办法,或者我是否必须等待原生的64位Delphi才能使用?
答案 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
在运行应用程序之前尝试替换它们。