2012-01-11 5 views
7

Ho uno script NSIS che funziona correttamente per un'applicazione di grandi dimensioni. Ho letto molti thread su tutto il web, ma non riesco a ottenere una risposta chiara a quanto segue: è possibile installare un'applicazione utilizzando NSIS che, una volta lanciato (indipendentemente dal tipo di utente) viene eseguito automaticamente come amministratore? Se è possibile, come può essere raggiunto?NSIS: installazione di un'applicazione per l'esecuzione sempre come amministratore

Nota: Sono già imponendo che il pacchetto NSIS deve essere eseguito come admin utilizzando

RequestExecutionLevel admin 

Ho provato a scrivere il requisito UAC per la voce del Registro applicazioni che utilizzano questo method ma non ho potuto ottenere il comando RUNASADMIN compilare in quanto non è nel formato richiesto per NSIS.

risposta

17

Per assicurarsi che il programma di installazione è in esecuzione come amministratore di solito vi consiglio questo piccolo esempio:

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 

l'applicazione installata deve eseguire una procedura simile se deve sempre essere eseguito come amministratore, per un'applicazione Win32 che sarebbe :

Se per "automaticamente viene eseguito come amministratore" si intende bypassare il controllo account utente, allora no che non è davvero possibile, l'intero punto di UAC è quello di permettere all'utente di confermare/negare operazioni privilegiate! Alcune applicazioni aggirano questo problema installando un servizio NT che esegue qualsiasi operazione richiesta per conto dell'applicazione. Non lo consiglierei perché riempie la macchina degli utenti con i servizi e potrebbe indebolire la sicurezza del sistema se il servizio non è codificato correttamente.

Se non hai scritto l'applicazione che stai installando, le tue opzioni sono un po 'più limitate. Se l'applicazione non dispone di un manifest, è possibile utilizzare un manifest external (myapp.exe.manifest) manifest.

L'impostazione della stringa RUNASADMIN sotto la chiave AppCompatFlags non è qualcosa che l'installatore dovrebbe fare, quelle opzioni di compatibilità dovrebbero essere controllate dall'utente, non dalle applicazioni.

Il thread del forum si è collegato a dire anche di twoways per impostare il flag SLDF_RUNAS_USER su un collegamento, questo non farà in modo che l'applicazione viene avviata come admin in tutte le situazioni, solo quando l'applicazione viene avviata dal collegamento ma potrebbe essere la tua unica opzione se non riesci a cambiare l'applicazione ...

+0

Grazie per il tuo tempo. Davvero una buona risposta ... – MoonKnight

+0

Davvero brillante! – MoonKnight