我们的32位应用程序通过ShellExecute启动Windows LNK文件(Shell链接)。当它试图“启动”指向64位二进制文件的链接(如“开始”菜单中的"Internet Explorer (64位)“快捷方式)时,它总是以启动32位二进制文件结束。在内部,ShellExecute错误地解析链接目标:在包含FOLDERID_ProgramFiles的LNK中有一个隐藏字段。64位的应用程序会将其解析到64位的Program Files目录中,但32位的应用程序不会。
Wow64DisableWow64FsRedirection不会更改ShellExecute的此行为。
除了经历64位的"trampoline“过程(由于我们的插件架构的工作方式,这不是一个选项),32位应用程序有没有办法像64位应用程序一样启动shell链接?
发布于 2010-09-02 09:44:25
安德鲁:我试过了,sysnative文件夹不能做任何Wow64DisableWow64FsRedirection不能做的事情。问题是ShellExecute错误地假设链接指向%programfiles(x86)%,而实际上它指向%programfiles% (即使在%programfiles(X86)%中没有这样的文件)。
打开64位程序已经运行得很好了。问题出在指向%programfiles%目录的.lnk文件。
发布于 2008-12-23 16:18:40
阅读this article from Raymond Chen我不认为你所要求的是可能的。我仍然会考虑做一个小的"trampoline“应用程序,他唯一的工作就是启动给定的应用程序/链接,然后编译一个不同的应用程序在32位和64位系统上使用。或者构建两个版本的应用程序,32位和64位版本。
发布于 2009-04-15 00:07:06
您可以派生一个调用LNK的explorer.exe进程。
有没有什么特别的原因你不能把你的程序编译成64位的应用程序?
https://stackoverflow.com/questions/386715
复制相似问题