C ++ ShellExecute специально не открывает файлы LNK

Возможно, вы захотите запустить bash -v, чтобы посмотреть, что происходит.

Я бы сделал следующее вместо игры с символическими ссылками:

RUN echo "source /usr/local/bin/virtualenvwrapper.sh" >> /etc/bash.bashrc

-1
задан Jeremiah T 17 January 2019 в 05:57
поделиться

1 ответ

Сначала проверьте, что ваш файл .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, путь будет проанализирован следующим образом: enter image description here Вот почему ваша программа не может найти путь.

И если я выберу x64: enter image description here

Поместите целевой файл в соответствующий файл.

РЕДАКТИРОВАТЬ:

После того, как я протестировал его с помощью инструмента MS Procmom.exe , я нашел что-то другое, если он работает как 32-битный, он покажет: [ 1114] enter image description here

Значение ключа - C:\Program Files (x86), и если мы запустим его как 64-битный, ключ будет ссылаться на «HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ ProgramFilesDir» значение ключа C:\Program Files. После того, как я проверил реестр: enter image description here enter image description here Кажется, что C:\Program Files не отображается по умолчанию в 32-битном реестре (я не уверен насчет конкретной причины). Если вы измените ключ ProgramFilesDir на C:\Program Files в 32-битном реестре, проблема будет исправлена.

0
ответ дан Drake Wu - MSFT 17 January 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: