Soy bastante nuevo con NSIS. Estoy tratando de solicitar permisos de administrador para ejecutar el instalador, ya que se entromete un poco con los registros. Mi problema con "RequestExecutionLevel" y "MULTIUSER_EXECUTIONLEVEL" es que ambos bloquean absolutamente a cualquier usuario que no sea administrador para que no abra el instalador, incluso cuando selecciona "Ejecutar como administrador" en el menú contextual. He intentado utilizar el DLL de RunAs, pero no he encontrado un solo hilo en cuanto a qué poner en la variable $ command pasada a la función "RunAsW".¿Cómo solicitas permisos de administrador usando NSIS?
Aquí es mi (bastante hackeado-up) código:
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
Una gran parte de ella es la conjetura y ensayo y error. (Por cierto, también intenté ejecutar un bucle para obtener todos los administradores, pero parece que el archivo DLL solo estaba destinado a máquinas de 32 bits, así que ...).
De todos modos, mi pregunta es:
¿Alguien sabe de una manera (usando "RunAs" o de otra manera) para abrir un cuadro de diálogo que solicita nombre de usuario y contraseña, comprobar las credenciales y continuar con la instalación sólo si se echa un vistazo ?
Además, sé que hay una manera de configurar un instalador para que tenga el bonito icono de escudo que le permite a los usuarios saber que se solicitará permiso de administrador. ¿Alguien sabe cómo hacer eso?
Cualquier ayuda sería muy apreciada, ya que esto es lo único que actualmente impide la implementación de mi aplicación.
¿Cuál es el punto de "System :: Alloc 64 " tira el puntero después de la explosión y la memoria. NSIS siempre es de 32 bits, por lo que su comentario sobre el ciclo tiene poco sentido ... – Anders
"ambos bloquean absolutamente cualquier usuario que no sea administrador para abrir el instalador, incluso cuando selecciona" Ejecutar como administrador "en el menú contextual" Esto no ¡suena bien! ¿Cuál es su versión de Windows y la configuración de UAC? – Anders
La variable de comando $ es lo que desea ejecutar, "calc.exe", etc. – Anders