【问题标题】:Launching Shell Links (LNKs) from WOW64从 WOW64 启动 Shell 链接 (LNK)
【发布时间】:2010-09-02 09:44:24
【问题描述】:

我们的 32 位应用程序通过 ShellExecute 启动 Windows LNK 文件(Shell 链接)。当它试图“启动”指向 64 位二进制文​​件的链接时(例如“开始”菜单中的“Internet Explorer(64 位)”快捷方式),它总是最终启动 32 位二进制文​​件。在内部,ShellExecute 错误地解析了链接目标:LNK 内部有一个隐藏字段,其中包含 FOLDERID_ProgramFiles。 64 位应用程序将此解析为 64 位程序文件目录,但 32 位应用程序不会。

Wow64DisableWow64FsRedirection 不会改变 ShellExecute 的这种行为。

除了通过 64 位“蹦床”过程(由于我们的插件架构如何工作,这不是一个选项),32 位应用程序有什么方法可以像 64 位一样启动 shell 链接应用会?

【问题讨论】:

    标签: windows shellexecute wow64 lnk


    【解决方案1】:

    Andrew:我试了一下,sysnative 文件夹没有执行 Wow64DisableWow64FsRedirection 尚未执行的任何操作。问题是 ShellExecute 错误地假设链接指向 %programfiles(x86)%,而实际上它指向 %programfiles%(即使 %programfiles(x86)% 中没有这样的文件)。

    打开 64 位程序已经可以正常工作了。问题在于指向 %programfiles% 目录的 .lnk 文件。

    【讨论】:

      【解决方案2】:

      阅读this article from Raymond Chen 我不认为你的要求是可能的。我仍然会考虑制作一个小的“蹦床”应用程序,他唯一的工作就是启动给定的应用程序/链接,并编译一个不同的应用程序以在 32 位和 64 位系统上使用。要么构建应用程序的两个版本,一个 32 位,一个 64 位。

      【讨论】:

        【解决方案3】:

        您可以生成一个调用 LNK 的 explorer.exe 进程。

        您不能将程序编译为 64 位应用程序有什么特殊原因吗?

        【讨论】:

          【解决方案4】:

          任何时候你在电脑上是不可能的,再想一想...关键是利用 c:\windows\sysnative\ 路径来关闭重定向。

          这是非常简单的代码,可以满足您的要求:

          #include <windows.h>
          #include <ShellAPI.h>
          #include <stdio.h>
          
          int main(int iArgc, const char *pArgv[])
          {
              ShellExecute(NULL, L"open", L"C:\\windows\\sysnative\\..\\..\\Program Files\\Internet Explorer\\iexplore.exe", NULL, NULL, SW_SHOWNORMAL);
              BOOL bIAmWow64 = FALSE;
              IsWow64Process(GetCurrentProcess(), &bIAmWow64);
              printf("I am a wow64 process: %hs\n", bIAmWow64 ? "Yes": "No");
              return 0;
          }
          

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-26
            • 2016-06-14
            • 1970-01-01
            • 2016-08-06
            • 2011-10-23
            • 2023-03-22
            • 2011-09-07
            • 1970-01-01
            相关资源
            最近更新 更多