0


我尝试使用 IShellLink 和 IPersistFIle 接口创建一个新的快捷链接文件。在我通过调用 IPersistFIle::save() 完成保存 lnk 文件后,我想在 save 函数返回后立即删除用于创建 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);
4

1 回答 1

2

您没有发布足够的代码,但方法名称是 IShellLink::SetIconLocation()。

地点

您删除该图标,该位置不再有效。

Boilerplate 是使用嵌入在可执行文件中的图标作为资源。但是,如果您使用单独的 .ico 文件,则需要保持其有效。

于 2012-09-05T02:16:08.633 回答