Принудительно Inno Setup, чтобы показать приглашение UAC во время установки

Как я могу заставить Inno Setup показывать приглашение UAC, если для запуска определенного установщика во время моей установки требуются повышенные привилегии? Пропуск установки этого установщика не критичен. Я обнаружил, что могу указать функцию AfterInstall для проверки, требуется ли повышение привилегий (IsAdminLoggedOn()), но как показать приглашение UAC для запуска этого установщика от имени определенного пользователя?

1 ответ

Решение

Нашел решение. Итак, если вам нужно запустить конкретный установщик с повышенными привилегиями во время установки, вам нужно:

  1. Укажите ваш установщик в Files раздел следующим образом:

    [Files]
    Source: "SomeSetup.exe"; DestDir: "{tmp}"; AfterInstall: SomeSetupAfterInstall()
    
  2. В Code раздел вы должны определить SomeSetupAfterInstall(), Там вы должны запустить свой установщик с runas использование глагола ShellExec если это не админ запустил настройку. Это может быть так:

    procedure SomeSetupAfterInstall();
    var
        ErrorCode: Integer;
        TmpPath: String;
        RunMethod: String;
    begin
        TmpPath:=ExpandConstant('{tmp}');
        if not IsAdminLoggedOn() then
        begin
            RunMethod := 'runas';
        end else
        begin
            RunMethod := '';
        end;
        ShellExec (RunMethod, TmpPath + '\SomeSetup.exe', '', '', 
                   SW_SHOW,  ewWaitUntilTerminated, ErrorCode);
    end;
    
Другие вопросы по тегам