Inno Setup - регистрация компонентов в качестве администратора

Основываясь на превосходном инсталляторе надстроек Excel (набор инструментов Daniel's XL), я создал установочный файл, который помимо прочего должен зарегистрировать некоторые ActiveX

[Files]
; The include file makes adds all .XLA and .XLAM files contained in the
; SOURCEDIR to the project.

Source: "c:\source\path\MSCOMCTL.OCX"; \
    DestDir: "\users\public\EzPasteFiles"; Flags: regserver      
Source: "c:\source\path\DAS_AX_Knob.dll"; \
    DestDir: "\users\public\EzPasteFiles"; Flags: regserver    
Source: "c:\source\path\GIF89.DLL"; \
    DestDir: "\users\public\EzPasteFiles"; Flags: regserver 

Мне нужно установить надстройку, затем перед началом регистрации файлов выполняется проверка прав администратора, и, если у пользователя их нет, отображается сообщение с просьбой ввести пароль администратора, чтобы можно было зарегистрироваться. Я знаю, что это можно сделать в начале установки, но тогда надстройка не будет активирована, если это стандартная учетная запись пользователя. Надстройка нуждается в зарегистрированных компонентах, обычный пользователь не может правильно установить ее.

Я ищу что-то подобное, чтобы выстрелить до начала регистрации:

MyProgChecked :=  not(IsAdminLoggedOn or IsPowerUserLoggedOn); 
if MyProgChecked = True then
begin
  MsgBox(
    'Kindly notice:' #13#13 
    'It seems as you are not looged as an administrator' #13#13
    'Please abort and reinstall EzPaste AS an administrator' #13#13
    '(To install As an Adminstrator, just save the exe setup anywhere then Right Click on it to get to this feature or ask your IT administrator for proper directives)',
    mbConfirmation, MB_OK);
  { Popup message asking for Pwd }
  ExitProcess(0); 
end;

Я естественно открыт для любого другого подхода

Я также буду рад понять, как пользователь домена (сервер Windows) без прав администратора должен приступить к установке надстройки.

1 ответ

Вы можете выполнить regsvr32.exe "как администратор", таким образом:

[Files]
Source: "MyDll.dll"; DestDir: "{app}"; AfterInstall: RegMyDll

[Code]

procedure RegMyDll;
var
  Path: string;
  RegSvr: string;
  Params: string;
  Registered: Boolean;
  ErrorCode: Integer;
begin
  Path := ExpandConstant(CurrentFilename);
  RegSvr := 'regsvr32.exe';
  Params := Format('/s "%s"', [Path]);
  Log(Format('Registering %s using "%s" %s', [Path, RegSvr, Params]));
  Registered :=
    ShellExec('runas', RegSvr, Params, '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
  if Registered and (ErrorCode = 0) then
  begin
    Log(Format('Registered %s', [Path]));
  end
    else
  begin
    MsgBox(Format('Registering %s failed with code %d', [Path, ErrorCode]), mbError, MB_OK);
  end;
end;

Повышенная регистрация


Альтернативная реализация состоит в том, чтобы создать субинсталлятор только для регистрации, который потребует прав администратора.

Аналогичный пример см. В разделе " Inno Setup" - доступ к непривилегированным папкам учетных записей из установщика, которому требуются привилегии.


Или используйте противоположный подход. Требовать права администратора, используя

[Setup]
PrivilegesRequired=admin

(который используется по умолчанию)

Но разверните файлы в исходную папку пользователя.
Смотрите мой ответ на Inno Setup, который всегда устанавливается в папку администратора AppData.

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