Как вы запрашиваете разрешения администратора с помощью NSIS?

Я новичок в NSIS. Я пытаюсь запросить разрешения администратора, чтобы запустить установщик, так как он немного портит реестры. Моя проблема с «RequestExecutionLevel» и «MULTIUSER_EXECUTIONLEVEL» заключается в том, что они оба абсолютно блокируют открытие установщика любым пользователем, не являющимся администратором, даже при выборе «Запуск от имени администратора» в контекстном меню. Я пробовал использовать DLL RunAs, но не нашел ни единого потока относительно того, что поместить в переменную $ command, переданную в функцию «RunAsW».

Вот мой (довольно взломанный) код:

     StrCpy $0 0
     StrCpy $1 ""
     System::Call 'RunAs::GetAdministrators(w r1, *i .r0) i .r2 ? u'
     System::Alloc 64
     Pop $4
     StrCpy $4 $2
     StrCpy $5 ""
     loop:
          IntCmp $0 0 endloop
          System::Call '*$4(w .r3)'
          StrCpy $5 "$5|$3"
    endloop:
    System::Free $4   ; we free the memory used by the array
    StrCpy $5 "$5" "" 1
    !insertmacro MUI_INSTALLOPTIONS_WRITE "Settings.ini" "Field 1" "ListItems" $5
     !insertmacro MUI_INSTALLOPTIONS_DISPLAY "Settings.ini"
     !insertmacro MUI_INSTALLOPTIONS_READ $1 "UserPass" "Field 1" "State"
     !insertmacro MUI_INSTALLOPTIONS_READ $2 "Settings.ini" "Field 2" "State"
     StrCpy $3 "%%LOGONSERVER%%"
     StrCpy $3 0
     StrCpy $4 0
     System::Call 'RunAs::RunAsW(w r1, w r2, w r3, *w .r4) i .r0 ? u'
     MessageBox MB_OK $0
     IntCmp $0 1 success
     Quit
     success:
     !insertmacro MUI_LANGDLL_DISPLAY

По большей части это просто догадки, проб и ошибок.(Кстати, я также пробовал пройти цикл, чтобы получить всех администраторов, но похоже, что DLL была предназначена только для 32-битных машин, так что ...).

В любом случае, мой вопрос:

Кто-нибудь знает способ (с помощью «RunAs» или как-то иначе) открыть диалоговое окно с запросом имени пользователя и пароля, проверить учетные данные и продолжить установку, только если они выполнили проверку?

Кроме того, я знаю, что есть способ настроить установщик, чтобы на нем был красивый значок щита, который позволяет пользователям узнать, что будет запрошено разрешение администратора. Кто-нибудь знает, как это сделать?

Любая помощь будет очень признательна, поскольку это единственное, что в настоящее время препятствует развертыванию моего приложения.

11
задан Amit Dvir 4 January 2012 в 18:32
поделиться