В программе на C # я хочу иметь возможность идентифицировать расположение файлов LNK-файлов (фактическое местоположение файла, а не местоположение LNK).Но иногда ShellLink возвращает старое место для файла.Например, он возвращает «C: \ Program Files (x86) \ XXX \ xxx.exe» вместо «C: \ Program Files \ XXX \ xxx.exe» (фактический текст в файле LNK).Я думал, что старое местоположение может быть кэшировано в реестре, но не смог найти эту строку.Любые идеи о том, как убедиться, что ShellLink определяет правильное местоположение или исправить эту конкретную «плохую» ссылку?Я заново создал ссылку и перезагрузил, но это не помогает.
/// <summary>Given a LNK file, return the file that it points to.</summary>
public static string ResolveShortcut(string filename)
{
ShellLink link = new ShellLink();
((IPersistFile)link).Load(filename, STGM_READ);
StringBuilder sb = new StringBuilder(MAX_PATH);
WIN32_FIND_DATAW data = new WIN32_FIND_DATAW();
((IShellLinkW)link).GetPath(sb, sb.Capacity, out data, 0);
if (sb.Length == 0 && !filename.EndsWith(".LNK", StringComparison.OrdinalIgnoreCase)) sb.Append(filename);
return sb.ToString();
}