有谁知道如何纠正这种行为?
当前,当我们的安装程序安装我们的应用程序时,它将获取IShellLink,然后使用快捷方式图标(在开始菜单和桌面中)所需的数据将其加载,然后使用IPersistFile :: Save编写快捷方式。
问题是通过IShellLink :: SetIconLocation为图标指定的路径使用%ProgramFiles%...(对于x64 ...)被转换为WRONG。
我注意到很多其他32位软件在x64下都无法通过此操作-但后来我假定他们自己在自己的.lnk创建代码中使用%ProgamFiles%作为文字元素。但是,似乎是IShellLink强迫该错误存在,并且我没有解决方法(或者说Shell中的链接属性编辑器对此问题负责,并且基础链接可以)。
一些Google搜索没有发现任何问题……是否有人遇到过这个问题,或者是否知道一篇文章/示例,说明如何强制x64 Windows不要对此进行处理?
澄清的例子:
hr = m_shell_link->SetIconLocation("C:\\Program Files (x86)\\Acme\\Prog.exe", 0);
Run Code Online (Sandbox Code Playgroud)
将产生一个带有正确图标的快捷方式,但是当您在快捷方式属性页中按“更改图标”时,将报告“ Windows找不到文件%ProgramFiles%\ Acme \ Prog.exe”。)
小智 3
将名称转换为短文件名,它只会转换驱动器号,但保留正确的路径。
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2724 次 |
| 最近记录: |