Jestem całkiem nowy z NSIS. Próbuję zażądać uprawnień administratora w celu uruchomienia instalatora, ponieważ jest trochę chaotyczny z rejestrami. Mój problem z "RequestExecutionLevel" i "MULTIUSER_EXECUTIONLEVEL" polega na tym, że absolutnie blokują one dostęp do instalatora użytkownikowi niebędącemu administratorem, nawet po wybraniu opcji "Uruchom jako administrator" w menu kontekstowym. Próbowałem już używać biblioteki RunAs DLL, ale nie znalazłem ani jednego wątku, co umieścić w zmiennej $ command przekazanej do funkcji "RunAsW".Jak zażądać uprawnień administratora przy użyciu NSIS?
Oto mój (dość hacked-up) Kod:
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
Wiele z nich jest po prostu odgadnąć pracy i prób i błędów. (btw - próbowałem także uruchomić pętlę, aby uzyskać wszystkich administratorów, ale wydaje się, że biblioteka DLL była przeznaczona tylko dla komputerów 32-bitowych, więc ...).
W każdym razie, moje pytanie brzmi:
Czy ktoś wie o sposób (używając „RunAs” lub w inny sposób), aby otworzyć okno dialogowe z prośbą o nazwę użytkownika i hasło, sprawdź referencje i kontynuować instalację tylko wtedy, gdy sprawdzeniu ?
Ponadto wiem, że istnieje sposób na skonfigurowanie instalatora, aby był wyposażony w tę ikonę przedstawiającą ikonę tarczy, która informuje użytkowników, że zostanie poproszony o pozwolenie administratora. Czy ktoś wie, jak to zrobić?
Każda pomoc będzie bardzo doceniona, ponieważ jest to jedyna rzecz, która obecnie uniemożliwia wdrożenie mojej aplikacji.
Jaki jest sens "System :: Alloc 64 " Wyrzucasz wskaźnik za pop i wyciekujesz pamięć. NSIS jest zawsze 32-bitowy, więc twój komentarz na temat pętli ma niewielki sens ... – Anders
"Oba absolutnie blokują dostęp do instalatora użytkownikowi niebędącemu administratorem, nawet po wybraniu opcji" Uruchom jako administrator "w menu kontekstowym" To nie brzmi dobrze! Jaka jest twoja wersja Windows i ustawienia UAC? – Anders
Zmienna $ command jest rzeczą, którą chcesz wykonać, "calc.exe" itd. – Anders