我尝试使用IShellLink和IPersistFIle接口创建一个新的快捷方式链接文件。
通过调用IPersistFIle :: save()完成保存lnk文件之后,我想在保存函数返回后立即删除用于创建lnk的ico文件。但问题是lnk文件显示在空白页面中,而不是我使用的图标。
如果我在保存后没有调用deletefile(),那么lnk文件看起来是正确的。
我的问题是保存lnk文件后何时可以删除图标文件?
PS:我试着睡觉,就像删除文件前2秒一样,lnk看起来也是正确的。
我的部分代码如下:
hRes = pShellLink->QueryInterface(IID_IPersistFile,(LPVOID*)&pPerFile);
if (SUCCEEDED(hRes))
{
WCHAR wszLinkFile[MAX_PATH + 1] = {0};
#ifdef _UNICODE
StringCchCopy(wszLinkFile, sizeof(wszLinkFile) / sizeof(wszLinkFile[0]), lpszLinkFilePath);
#else
MultiByteToWideChar(CP_ACP, 0, lpszLinkFilePath, -1, wszLinkFile, MAX_PATH);
#endif
hRes = pPerFile->Save(wszLinkFile, TRUE);
pPerFile->Release();
}
pShellLink->Release();
::CoUninitialize();
DeleteFile(lpszIconPath);
答案 0 :(得分:2)
您没有发布足够的代码,但方法名称是IShellLink :: SetIconLocation()。
位置强>
您删除该图标并且该位置不再有效。
Boilerplate是使用嵌入在可执行文件中的图标作为资源。但是如果你使用单独的.ico文件,那么你需要保持它有效。