Ярлык Inno Setup на рабочем столе (ссылка) с расширенным свойством "Запуск от имени администратора"

Я изо всех сил пытаюсь получить Inno setup (5.5.9u) для создания ярлыка на рабочем столе, который имеет значок и имеет расширенное свойство "Запуск от имени администратора".

вопрос

Этот вопрос немного отличается от: Как установить "Запуск от имени администратора" для файла с помощью Inno Setup

Поскольку я пытаюсь не запускать программу во время установки с правами администратора (программа установки уже запущена с правами администратора), а оставить на рабочем столе ссылку с дополнительным свойством "Запуск от имени администратора".

Пример кода

[Icons]
Name: "{group}\EGPL Watson Uninstall"; Filename: "{uninstallexe}"; WorkingDir: "{app}"
Name: "{commondesktop}\DashBoard"; \
    Filename: "{app}\dashboard\node_modules\electron\dist\electron.exe main.js"; \
    WorkingDir: "{app}\dashboard"; IconFilename: "{src}\dashboard\build\configure.ico"

1 ответ

Решение

Inno Setup не поддерживает это изначально.

Флаг "Запуск от имени администратора" является немного файлом.lnk. Увидеть:

Вы можете установить бит, используя следующий код:

[Icons]
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; \
  AfterInstall: SetElevationBit('{userdesktop}\My Program.lnk')

[Code]

procedure SetElevationBit(Filename: string);
var
  Buffer: string;
  Stream: TStream;
begin
  Filename := ExpandConstant(Filename);
  Log('Setting elevation bit for ' + Filename);

  Stream := TFileStream.Create(FileName, fmOpenReadWrite);
  try
    Stream.Seek(21, soFromBeginning);
    SetLength(Buffer, 1);
    Stream.ReadBuffer(Buffer, 1);
    Buffer[1] := Chr(Ord(Buffer[1]) or $20);
    Stream.Seek(-1, soFromCurrent);
    Stream.WriteBuffer(Buffer, 1);
  finally
    Stream.Free;
  end;
end;

Протестировано на Unicode-версии Inno Setup. Но это должно, еще более естественно, работать и на версии Ansi.

Другие вопросы по тегам