Почему значок lnk не может отображаться правильно?

Я попытался создать новый файл ссылки ярлыка, используя интерфейс 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);

0

Решение

Вы не опубликовали достаточно кода, но имя метода IShellLink :: SetIconLocation ().

Место нахождения

Вы удаляете значок, и местоположение больше не является действительным.

Boilerplate — использовать значок, встроенный в исполняемый файл, в качестве ресурса. Но если вы используете отдельный файл .ico, вам нужно будет сохранить его в силе.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector