我正在使用Windows 7(x64)和Delphi 2010 .
我正在编写一个模拟开始菜单的组件 . 但是,我遇到了以下问题:
- 如果我尝试使用
ShellExecute
打开快捷方式(.lnk文件),只要%ProgramFiles%是快捷方式的目标路径的一部分,它就会失败(然后它会查看C:\ Program Files(x86)文件夹而不是C:\ Program Files);
如果%ProgramFiles%是图标文件路径的一部分,则 ShGetFileInfo
无法在系统映像列表中提取正确的图标索引(与上述问题相同) .
对于上述问题是否有任何解决方法,或者我是否必须等待本机64位Delphi才能使用?
3 回答
我想你应该先拨打Wow64DisableWow64FsRedirection,然后再拨打Wow64RevertWow64FsRedirection .
好的,一个证明问题的小例子 .
我使用以下参数调用ShellExecute:
Internet Explorer(64位).lnk的目标是:
但是,仍然打开了32位版本的iexplore.exe . 在这种情况下,路径甚至不使用%ProgramFiles%,因此不知何故
ShellExecute
将在内部将C:\ Program Files转换为C:\ Program Files(x86) . 我不知道如何让它打开64位版本的iexplore.exe .另一个问题是,在调用
Wow64DisableWow64FsRedirection
后,ShellExecute
将不再打开文件夹 .以下环境变量将始终指向64位计算机上的正确方向,并且将在32位计算机上未定义:
来自32位架构上的32位shell:
来自64位架构上的32位shell:
从64位shell:
在运行应用程序之前尝试替换它们 .