Сначала убедитесь, что ваш файл .lnk находится в пути.
Затем (и наиболее вероятная причина вашей проблемы) проверьте, что ваше имя файла .lnk создано правильно. Чтобы убедиться, что это не похоже на «blender.lnk.lnk» (я могу воспроизвести вашу проблему, если я установил как это).
Вы также можете попытаться самостоятельно проанализировать путь к файлу ссылки.
Вот образец:
void ShortcutToRealpath(LPWSTR pszString, LPSTR pdzString)
{
IShellLink *pShellLink;
HRESULT hRes;
::CoInitialize(NULL);
hRes = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&pShellLink);
if (SUCCEEDED(hRes))
{
IPersistFile *ppf;
hRes = pShellLink->QueryInterface(IID_IPersistFile, (void **)&ppf);
if (SUCCEEDED(hRes))
{
hRes = ppf->Load(pszString, TRUE);
if (SUCCEEDED(hRes))
{
pShellLink->GetPath(pdzString, MAX_PATH, NULL, 0);
}
ppf->Release();
}
pShellLink->Release();
}
::CoUninitialize();
}
Когда я создаю платформу x86, путь будет проанализирован следующим образом:
Вот почему ваша программа не может найти путь.
И если я выберу x64:
Поместите целевой файл в соответствующий файл.
EDIT:
После того, как я протестировал его с помощью инструмента MS Procmom.exe , я нашел что-то другое, если он будет работать как 32-битный, он покажет:
Значение ключа - C:\Program Files (x86)
, и если мы запустим его как 64-разрядный, ключ будет ссылаться на «HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ ProgramFilesDir», значение ключа - C:\Program Files
. После того, как я проверил реестр:
Кажется, что C:\Program Files
не отображается по умолчанию в 32-разрядном реестре (я не уверен насчет конкретной причины).
Если вы измените ключ ProgramFilesDir
на C:\Program Files
в 32-битном реестре, проблема будет исправлена.