Я новичок в NSIS.
Я пытаюсь запросить разрешения администратора для запуска установщика, так как он немного мешает с реестрами.
Моя проблема с «RequestExecutionLevel» и «MULTIUSER_EXECUTIONLEVEL» заключается в том, что они оба абсолютно блокируют любого пользователя, не являющегося администратором, от открытия программы установки, даже при выборе «Запуск от имени администратора» в контекстном меню.
Я пытался использовать библиотеку 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» или иным образом) открыть диалоговое окно с запросом имени пользователя и пароля, проверить учетные данные и продолжить установку только в случае их проверки?
Кроме того, я знаю, что есть способ настроить установщик так, чтобы он шел с этим красивым значком щита, который позволяет пользователям знать, что будет запрошено разрешение администратора. Кто-нибудь знает, как это сделать?
Буду очень признателен за любую помощь, поскольку это единственное, что в настоящее время препятствует развертыванию моего приложения.