Я использую Inno Setup. Установленное приложение может иметь несколько установок, поэтому создается несколько ярлыков меню «Пуск». Проблема, с которой я сталкиваюсь, заключается в том, что несколько значков создаются в одном и том же месте приложения (дубликаты). Мое решение заключается в том, чтобы в процессе установки проверить существующие ярлыки меню «Пуск», прочитать свойство рабочего или целевого каталога ярлыка и сравнить его с текущим каталогом установки. Если один из ярлыков совпадает, не устанавливайте ярлык.
Я использую пример файла «CodeAutomation2.iss» в качестве отправной точки для чтения рабочего каталога по ссылке быстрого доступа. Код IShellLink в файле примера — это то, что я использовал, но когда я пытаюсь использовать «GetWorkingDirectory», я получаю следующую ошибку.
Ниже приведен код, который я использую. Что я делаю не так с «GetWorkingDirectory»?
var
ShortcutFile: String;
WorkingDir: String;
Obj: IUnknown;
SL: IShellLinkW;
PF: IPersistFile;
begin
{ Create the main ShellLink COM Automation object }
Obj := CreateComObject(StringToGuid(CLSID_ShellLink));
{ Set the shortcut properties }
SL := IShellLinkW(Obj);
PF := IPersistFile(Obj);
NumFiles := 1
ShortcutFile := ExpandConstant('{#MyAppName}');
Log('File is: ' + ExpandConstant('{group}') + '\' + ShortcutFile + '.lnk');
OleCheck(PF.Load(ExpandConstant(ExpandConstant('{group}') + '\' + ShortcutFile + '.lnk'), 0));
OleCheck(SL.GetWorkingDirectory(WorkingDir, 250));
Log('WorkingDir: ' + WorkingDir);