2012-01-11 51 views
7

Tengo un script de NSIS que funciona bien para una aplicación grande. He leído muchos hilos en toda la web, pero no puedo obtener una respuesta clara a lo siguiente: ¿es posible instalar una aplicación utilizando NSIS que, cuando se inicia (independientemente del tipo de usuario) se ejecuta automáticamente como administrador? Si esto es posible, ¿cómo se puede lograr?NSIS: instalar una aplicación para ejecutar siempre como administrador

Nota: Ya estoy imponiendo que el paquete NSIS debe ejecutarse como admin usando

RequestExecutionLevel admin 

He intentado escribir el requisito UAC a la entrada del registro de las aplicaciones que utilizan este method pero no pude conseguir el comando RUNASADMIN compilar ya que no está en el formato requerido para NSIS.

Respuesta

17

Para asegurarse de que el instalador se está ejecutando como administrador general recomiendo este pequeño ejemplo:

Outfile RequireAdmin.exe 
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on) 

!include LogicLib.nsh 

Function .onInit 
UserInfo::GetAccountType 
pop $0 
${If} $0 != "admin" ;Require admin rights on NT4+ 
    MessageBox mb_iconstop "Administrator rights required!" 
    SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED 
    Quit 
${EndIf} 
FunctionEnd 

Page InstFile 

Section 
SectionEnd 

la aplicación instalada debe realizar pasos similares si siempre tiene que ejecutar como administrador, para una aplicación Win32 que sería :

Si "se ejecuta automáticamente como administrador" significa que se pasa por alto la elevación UAC, entonces eso no es posible, ¡el objetivo de UAC es permitir al usuario confirmar/denegar operaciones privilegiadas! Algunas aplicaciones solucionan esto instalando un servicio NT que realiza cualquier operación que requieran en nombre de la aplicación. No recomendaría esto porque llena los servicios de la máquina de los usuarios y podría debilitar la seguridad del sistema si el servicio no está codificado correctamente.

Si no escribió la aplicación que está instalando, entonces sus opciones son un poco más limitadas. Si la aplicación no tiene ningún manifiesto, puede utilizar un manifiesto external (myapp.exe.manifest) .

Establecer la cadena RUNASADMIN bajo la clave AppCompatFlags no es realmente algo que el instalador debería estar haciendo, se supone que esas opciones de compatibilidad deben ser controladas por el usuario, no por las aplicaciones.

El hilo del foro se ha vinculado a decir también de twoways para establecer el indicador SLDF_RUNAS_USER en un acceso directo, esto no va a garantizar que la aplicación se inicia como administrador en todas las situaciones, sólo cuando la aplicación se inicia desde el acceso directo pero podría ser su única opción si no puede cambiar la aplicación en sí ...

+0

Gracias por su tiempo. Muy buena respuesta ... – MoonKnight

+0

¡Brillante de hecho! – MoonKnight

Cuestiones relacionadas