Я попытался создать новый файл ссылки ярлыка, используя интерфейс IShellLink и IPersistFIle.
После того как я закончу сохранение файла lnk, вызвав IPersistFIle :: save (), я хочу удалить файл ico, использованный для создания lnk, сразу после возврата из функции сохранения. Но проблема в том, что файл 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);
Вы не опубликовали достаточно кода, но имя метода IShellLink :: SetIconLocation ().
Место нахождения
Вы удаляете значок, и местоположение больше не является действительным.
Boilerplate — использовать значок, встроенный в исполняемый файл, в качестве ресурса. Но если вы используете отдельный файл .ico, вам нужно будет сохранить его в силе.
Других решений пока нет …