有谁知道如何纠正这种行为?
目前,当我们的安装程序安装我们的应用程序时,它会获得一个IShellLink,然后使用我们的快捷方式图标(在开始菜单和桌面中)所需的数据加载它,然后使用IPersistFile::Save写出快捷方式。
问题是通过IShellLink::SetIconLocation为图标指定的路径被转换为使用%ProgramFiles%...这...对于 x64,是错误的。
我注意到许多其他 32 位软件在 x64 下都失败了 - 但后来我假设他们自己使用%ProgamFiles%作为 .lnk 创建代码中的文字元素。但是,似乎是IShellLink迫使此错误存在,并且我没有解决方法(或者可能是 shell 中的链接属性编辑器负责该问题并且底层链接正常)。
一些谷歌搜索没有任何结果......有没有其他人遇到过这个或知道如何强制 x64 窗口不搞砸的文章/示例?
澄清示例:
hr = m_shell_link->SetIconLocation("C:\\Program Files (x86)\\Acme\\Prog.exe", 0);
将产生一个具有正确图标的快捷方式,但是当您在快捷方式属性页面中按“更改图标”时,将报告“Windows 找不到文件 %ProgramFiles%\Acme\Prog.exe”。)