有谁知道如何纠正这种行为?
目前,当我们的安装程序安装我们的应用程序时,它会获得一个IShellLink,然后加载我们的快捷方式图标(在开始菜单和桌面中)所需的数据,然后使用IPersistFile::保存写出快捷方式。
问题是为图标指定的路径,通过IShellLink::设置图标位置,转化为使用%程序文件%...对于 x64,这是错误的。
我注意到很多其他 32 位软件在 x64 下都会出现此问题 - 但后来我假设他们正在使用%程序文件%它们本身,作为其 .lnk 创建代码中的文字元素。然而,似乎是这样的IShellLink迫使这个错误存在,并且我没有解决方法(或者可能是外壳程序中的链接属性编辑器负责该问题并且底层链接没问题)。
一些谷歌搜索没有发现任何结果...还有其他人遇到过这个问题或者知道如何强制 x64 windows 不把这个搞砸的文章/示例吗?
澄清示例:
hr = m_shell_link->SetIconLocation("C:\\Program Files (x86)\\Acme\\Prog.exe", 0);
将生成具有正确图标的快捷方式,但是当您在快捷方式属性页面中按“更改图标”时,将报告“Windows 找不到文件 %ProgramFiles%\Acme\Prog.exe。”)
将名称转换为短文件名,它只会转换驱动器号,但保留正确的路径。
PWCHAR pIcon = L"C:\\Program Files (x86)\\Myfoo\\Bar.exe";
DWORD dwLen = GetShortPathName(pIcon, NULL, 0);
PWCHAR pShort = NULL;
if (dwLen) {
pShort = new WCHAR[dwLen];
dwLen = GetShortPathName(pIcon, pShort, dwLen);
if (!dwLen) {
delete [] pShort;
pShort = NULL;
}
}
if (NULL == pShort) {
psl->SetIconLocation(pIcon,iTmp);
} else {
psl->SetIconLocation(pShort,iTmp);
}
delete [] pShort;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)