UAC plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(→‎Info: Added link)
 
(26 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{PageAuthor|Anders}}
{{PageAuthor|Anders}}
[[Category:Plugins]]
[[Category:Plugins]]
Télécharger == == & Info
[[Category:Deprecated]]
Ce plug-in tentatives de contourner les problèmes d'installation sur Vista UAC / 7. Ce plug-in permet à votre installateur pour fonctionner avec un processus de niveau utilisateur et un processus de niveau administrateur. Cela vous permet d'accomplir des choses qui seraient autrement très difficile. Par exemple, vous pouvez avoir un niveau installateur admin lancer un autre processus au niveau utilisateur. Ou vous pouvez avoir un niveau installateur admin créer des raccourcis au niveau utilisateur.
 
Tout a commencé en [http://forums.winamp.com/showthread.php?s=&threadid=265780 ce fil]. Il a été testé sur le terrain avec de bons résultats. Il est encore nettement au stade bêta (c.-à-utiliser à vos risques et périls).
 
branche courante: [% http://stashbox.org/988128/UAC% 20v0.2.2c 20 - 2020100828.zip% v0.2.2c]
 
branche vieillesse: [20v0.0.11d.zip% http://stashbox.org/560965/UAC v0.0.11d]


<font color=red NOTE red;display:block;"> style="border:2px solides: Tout le code sur cette page s'applique à l'ancienne version, la syntaxe a changé légèrement de 0,2 et vous devez utiliser les macros dans uac.nsh </ font>
<div style="border: 1px solid #404000; background-color:#FFFF80; color:#000; padding:0.5em;"><b>Note:</b>This plug-in is deprecated. It started out as a proof of concept in the early Vista days and should now be considered abandoned.</div>


=== === L'installation de base
Pour installer le plugin UAC dans votre configuration NSIS, il vous suffit de copier deux fichiers ZIP de ce qui précède:


* Pour les installateurs ANSI,'''UAC.nsh''copier dans votre répertoire d'inclusion (par exemple C: \ Program Files \ NSIS \ Include) et'''''UAC.dll chez sortie / A dans votre répertoire de plugins ( par exemple C: \ Program Files \ NSIS \ Plugins).
==Plugin Info==
* '''Version:''' 0.2.4c (20150526)
* '''Type:''' Runtime plugin
* '''Character encoding:''' Ansi
* '''Minimum OS:''' Win95/NT4 (Elevation on Win2000+)
* '''Minimum NSIS Version:''' 2.45
* '''License:''' zlib
* '''Download:''' <attach>UAC.zip</attach>


* Pour les installateurs Unicode,'''UAC.nsh''copier dans votre répertoire d'inclusion (par exemple C: \ Program Files \ NSIS \ Unicode \ Include) et'''''UAC.dll chez sortie / U dans votre Plugins répertoire (par exemple C: \ Program Files \ NSIS \ Unicode \ Plugins).


=== === Comment ça marche?
==Info==
This plug-in attempts to work around UAC installation problems on Win2000+.  This plug-in allows your installer to operate with a user level process and an admin level process ([https://docs.microsoft.com/en-us/windows/win32/secauthz/administrator-broker-model administrator broker model]).  This allows you to accomplish things that would otherwise be very difficult.  For example, you can have an elevated installer instance launch another process as the user.


Nécessaire ==== ==== Fournir le code
It all started in [http://forums.winamp.com/showthread.php?s=&threadid=265780 this thread].  It has been field tested with good results.  It is still definitely in the beta stage (i.e. use at your own risk).
* Tout d'Abord, le script NSIS DOIT fonctionner devrait preciser qu'il Itinéraires des privilèges d'Utilisateur, et non des pas des privilèges d'administrateur.


==Basic Example==
<highlight-nsis>
<highlight-nsis>
Utilisateur RequestExecutionLevel / * RequestExecutionLevel compte tenu des adaptations! * /
/*
</ Highlight-nsis>
Basic script for a all users/shared installer.
* Ensuite, l'Approche commune la plus intérêt de laisser l'UAC plugin initialisateur onInit DANS code le.:
It runs the installed application as the correct user...
<highlight-nsis>
*/
; Tenter de Donner l'UAC plug-in d'Utilisateur non Processus et Processus de l'ONU d'admin.
Fonction. OnInit


UAC_Elevate:
!define S_NAME "UAC_Basic example"
UAC:: RunElevated
Name "${S_NAME}"
StrCmp 1223 0 $ UAC_ElevationAborted; de dialogue interrompu par l'Utilisateur UAC?
OutFile "${S_NAME}.exe"
StrCmp 0 0 0 $ UAC_Err; Erreur?
RequestExecutionLevel user ; << Required, you cannot use admin!
StrCmp 1 1 0 $ UAC_Success; Sommes-nous de La Vraie affaire ous Tout simplement l'enveloppe?
InstallDir "$ProgramFiles\${S_NAME}"
Quitter


UAC_Err:
!include MUI2.nsh
MB_ICONSTOP MessageBox "Impossible d'elever, d'Erreur $ 0"
!include UAC.nsh
Avorter


UAC_ElevationAborted:
!macro Init thing
# Élévation une Abandonnée Été, ordinary fonctionner?
uac_tryagain:
MessageBox MB_ICONSTOP «Ce programme d'installation requiert Accès non admin, abandonner!"
!insertmacro UAC_RunElevated
Avorter
${Switch} $0
${Case} 0
${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
MessageBox mb_YesNo|mb_IconExclamation|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, try again" /SD IDNO IDYES uac_tryagain IDNO 0
${EndIf}
;fall-through and die
${Case} 1223
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, aborting!"
Quit
${Case} 1062
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Logon service not running, aborting!"
Quit
${Default}
MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Unable to elevate, error $0"
Quit
${EndSwitch}


UAC_Success:
SetShellVarContext all
StrCmp 1 3 4 $; Admin?
!macroend
StrCmp 3 1 0 $ UAC_ElevationAborted; Essayez à nouveau?
MessageBox MB_ICONSTOP «Ce programme d'installation requiert Accès non admin, à essayer nouveau"
goto UAC_Elevate


FunctionEnd
Function .onInit
</ Highlight-nsis>
!insertmacro Init "installer"
* Avant la sortie d'installation, Vous devrez Nettoyer le plugin. Pas si n'avez vous, il laissera Derrière Lui UNE UAC.dll en% de l'Utilisateur dossier TEMP%. Un Moyen facile de s'égoutter les Dégâts intérêt en fournissant le texte précédent:
<highlight-nsis>
Fonction. OnInstFailed
UAC:: Décharger; décharger appeler liard!
FunctionEnd
FunctionEnd


Fonction. OnInstSuccess
Function un.onInit
UAC:: Décharger; décharger appeler liard!
!insertmacro Init "uninstaller"
FunctionEnd
FunctionEnd
</ Highlight-nsis>
Que Rappelez-vous si l'installation Votre soi avant au Québec ferme CES Événements déclenchés may être, Vous Devez fournir UNE UAC:: avant décharger le programme d'installation se ferme.


==== Comment l'UAC plug-in fonctionne Itinéraires des privilèges d'Utilisateur et admin ====
!insertmacro MUI_PAGE_WELCOME
* Lorsque le programme d'installation NSIS lance, il une des privilèges d'Utilisateur (tél. nominale specified Que l'Utilisateur RequestExecutionLevel). Immédiatement, l'installateur NSIS onInit Appelle code fils .. (Note, Fenêtre Aucune n'est Encore visible stade CE A). L'UAC plugin Përmet non Processus de''deuxième''installateur et tente de l'elever Itinéraires des privilèges admin. Nécessaire Si, ous l'ONU UAC Executer en important au Québec boîte de dialogue s'affiche de verser secouriste à elever CE Deuxième Processus Itinéraires des privilèges admin. CE un stade, si Vous ouvrez le Gestionnaire des Tâches, Vous verrez Deux Processus en cours d'installation. Le Processus Utilisateur may être de considére Comme le Processus externe, et le Processus de admin le Processus interne.
!insertmacro MUI_PAGE_DIRECTORY
* Une Fois eleves, l'admin / s'affiche Processus interne. C'Est La Fenêtre d'installation au Québec les users verront.
!insertmacro MUI_PAGE_INSTFILES
* Maintenant Que Vous AVEZ Processus non admin, continuateur pouvez laisser script Vous à Votre faire SA a choisi. Si Jamais Vous AVEZ Besoin de faire journey au Niveau Utilisateur, Vous le FAITES par l'UAC plugin, et l'UAC plugin whats fonctionnera Nécessaire par l'Utilisateur invisible / externe Processus. Par exemple, l'UAC:: Quelque Exec exécuteur may choisi Itinéraires des privilèges d'Utilisateur et non des pas des privilèges d'administrateur. Ou UAC:: Peut ExecCodeSegment exécuteur Fonction UNE AVEC Entière les privilèges Utilisateur.
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!insertmacro MUI_PAGE_FINISH


Exemples === ===
!insertmacro MUI_UNPAGE_CONFIRM
NOTE''<font color="red">: syntaxe une DANS Changé 0,2 alphas, Tout sur la page this utiliser la> vieille syntaxe'''</ police
!insertmacro MUI_UNPAGE_INSTFILES


De nombreux exemples se vendor Dans Le fichier. zip ci-Dessus. Si Vous Voulez UNE Meilleure idée de la CE au Québec CE plugin may faire, CES étudier "exemples. Un bref Aperçu de Deux exemples simples sont «donnés ici:
!insertmacro MUI_LANGUAGE "English"
==== Création d'Utilisateur non Raccourci ====


NE UAC_RealWorldExample.nsi:


<highlight-nsis>
Function PageFinishRun
CreateShortcuts Fonction
; You would run "$InstDir\MyApp.exe" here but this example has no application to execute...
CreateShortcut "lnk $ Desktop \ $ {APPNAME}." "$ Windir \ Notepad.exe"
!insertmacro UAC_AsUser_ExecShell "" "$WinDir\notepad.exe" "" "" ""
FunctionEnd
FunctionEnd


«Raccourci bureau» Section
Section
GetFunctionAddress $ 0 CreateShortcuts
SetOutPath $InstDir
UAC:: ExecCodeSegment 0 $
# TODO: File "MyApp.exe"
WriteUninstaller "$InstDir\Uninstall.exe"
SectionEnd
SectionEnd
</ Highlight-INS>


Par exemple CET Dan, voulons UNO exécuteur la Fonction CreateShortcuts AVEC les privilèges Utilisateur, may il Fait how are exchange rates non Utilisateur au Niveau Raccourci. Fait, PREMIÈREMENT, definir la Fonction. Ensuite, utilisez GetFunctionAddress verser Obtenir l'adresse Fonction of this. Ensuite, Appelez UAC: au ExecCodeSegment demandeuse de Processus externe Utilisateur / pour Fonction this exécuteur. Comme la Fonction sérums executé au Niveau Utilisateur, il Raccourci how are exchange rates va verser l'ONU au Québec plutot Utilisateur versez l'administrateur.
Section Uninstall
 
SetOutPath $Temp ; Make sure $InstDir is not the current directory so we can remove it
==== Lancement d'Une application Itinéraires des privilèges Utilisateur ====
# TODO: Delete "$InstDir\MyApp.exe"
<highlight-nsis>
Delete "$InstDir\Uninstall.exe"
;! Insertmacro UAC_AsUser_ExecShell <Command> <Fichier> <Paramètres> <WorkingDir> <ShowWindow>
RMDir "$InstDir"
! $ «Ouverte» insertmacro UAC_AsUser_ExecShell INSTDIR \ $ {} APPFILE '-FirstRun' $ INSTDIR'''
SectionEnd
</ Highlight-nsis>
</highlight-nsis>
 
Lorsque $ INSTDIR \ $ {} CEST APPFILE le chemin vers le fichier au Québec Vous souhaitez lancer.
 
Si Vous utilisez la peau et le MUI Lancement d'installation de l'application Pour Vous, Vous aurez Besoin PEU faire verser des Nations Unies ainsi que de Travail.
 
<highlight-nsis>
! Definir MUI_FINISHPAGE_RUN
! ExecAppFile MUI_FINISHPAGE_RUN_FUNCTION Definir
 
Fonction ExecAppFile
! $ «Ouverte» insertmacro UAC_AsUser_ExecShell INSTDIR \ $ {} APPFILE '-FirstRun' $ INSTDIR'''
FunctionEnd
</ Highlight-nsis>
 
Gardez à l'esprit Que Vous AVEZ Encore definir à MUI_FINISHPAGE_RUN (vide Comme) Sinon Pas MUI NE fournira l'option à Tous.
 
=== === IMPORTANTES Notes
 
# Besoin Si AVEZ Vous d'utiliser »l'UAC Plugin pour le programme de désinstallation, Ainsi, Besoin d'initialisateur Vous aurez l'UAC Plugin pour le programme de désinstallation, un.onInit nominale comme. Pas d'N'oubliez exécuteur le s'égoutter AVEC l'UAC:: décharger avant Votre sortie de désinstallation. Bonnes adresses versez sont Nettoyer le un.OnUnInstFailed un.OnUnInstSuccess et
# Le Processus Utilisateur externe / n'affiche Pas de sortie de CE dépassé S'est Qui. Par exemple, si Vous AVEZ le Processus Utilisateur externe / how are exchange rates Raccourci de l'ONU, et il echoue, l'intérieur / admin Processus rien actuellement n'affichera visible verser pertains survenu intérêt qu'un probleme. Parce Que C'Est le Processus Utilisateur externe / communicate NE Pas encore de retour à l'intérieur / Processus admin.
# Quand l'ONU ous Utilisateur standard de l'administrateur Limitée informations d'Approvisionnements de Dans la boîte de dialogue Executer de Québec en important, Vous pouvez éprouver l'ennui AVEC les permissions du fichier extrait. Par exemple, si l'ONU Windows 2000 standard info administrateur Utilisateur fournit de Dans la boîte de dialogue Executer de Québec en important, et l'installateur fichier extrait NSIS des Nations Unies. Exe, essayez IUP d'appeler l'ACDE. Exe par l'ONU Exec may échouer. s'agit d'or prohibition Problème de l'ONU, Vous souhaitez utiliser »le [[AccessControl_plug-en | AccessControl plug-in]].
 
=== === Testicules Environnements
 
Ce plugin, un Été Testé DANS les environnements suivants:
 
* Windows 7 - UAC Le - Administrateur
* Windows Vista - UAC Le - Administrateur
* Windows Vista - UAC Off - Administrateur
* Windows Vista - UAC Le - Standard User - Utilisateur de l'info administrateur des Approvisionnements de Dans la boîte de dialogue UAC de
* Windows Vista - UAC Le - pas fournit d'informations NE d'administrateur de Dans la boîte de dialogue UAC de - Standard Utilisateur
* Windows Vista - UAC Off - Standard User - Utilisateur de l'info administrateur d'Approvisionnements de Dans la boîte de dialogue Executer de Québec en important
* Windows Vista - UAC Off - pas fournit d'informations NE d'administrateur de Dans la boîte de dialogue Executer de Québec en important - Standard Utilisateur
* Windows XP - Administrateur
* Windows XP - Limited Utilisateur - info Utilisateur de l'administrateur d'Approvisionnements de Dans la boîte de dialogue Executer de Québec en important
* Windows XP - Limited Utilisateur - pas fournit d'informations NE d'administrateur de Dans la boîte de dialogue Executer de Québec en important
Windows 2000 * - Administrateur
* Windows 2000 - User Standard - info Utilisateur de l'administrateur d'Approvisionnements de Dans la boîte de dialogue Executer de Québec en important
* Windows 2000 - Standard Utilisateur - pas fournit d'informations NE d'administrateur de Dans la boîte de dialogue Executer de Québec en important
* Windows testicules 95 & 98 Été Ont débuts au rappel de fabrique et UNO esperons du travail (n ° d'ici élévation verser des raisins évidentes)


Windows ME et NT4 fonctionner n'ont Pas Été Testees, devrait MAIS. (Si Vous AVEZ Testé sur l'ONU de la SCÉ OS'es, s'il vous plaît rendre Compte des Résultats ICI OU sur le forum)
==Important Notes==
# If you need to use the UAC plugin for the uninstaller as well, you will need to initalize the UAC plugin for the uninstaller, such as through un.onInit.
# The outer/user process does not display any output as to what occurred.  For example, if you have the outer/user process create a shortcut, and it fails, the inner/admin process currently visible will not display anything to indicate that a problem occurred.  This is because the outer/user process does not yet communicate back to the inner/admin process.
# When a standard or limited user supplies administrator information into the Run As dialog, you may experience permissions trouble with any extracted file.  For example, if a Windows 2000 standard user supplies administrator info into the Run As dialog, and the NSIS installer extracts an .exe file, then trying to call that .exe through an Exec can fail. If this is a problem, you will want to use the [[AccessControl_plug-in|AccessControl plug-in]].

Latest revision as of 14:32, 21 January 2022

Author: Anders (talk, contrib)


Note:This plug-in is deprecated. It started out as a proof of concept in the early Vista days and should now be considered abandoned.


Plugin Info

  • Version: 0.2.4c (20150526)
  • Type: Runtime plugin
  • Character encoding: Ansi
  • Minimum OS: Win95/NT4 (Elevation on Win2000+)
  • Minimum NSIS Version: 2.45
  • License: zlib
  • Download: UAC.zip (50 KB)


Info

This plug-in attempts to work around UAC installation problems on Win2000+. This plug-in allows your installer to operate with a user level process and an admin level process (administrator broker model). This allows you to accomplish things that would otherwise be very difficult. For example, you can have an elevated installer instance launch another process as the user.

It all started in this thread. It has been field tested with good results. It is still definitely in the beta stage (i.e. use at your own risk).

Basic Example

/*
Basic script for a all users/shared installer.
It runs the installed application as the correct user...
*/
 
!define S_NAME "UAC_Basic example"
Name "${S_NAME}"
OutFile "${S_NAME}.exe"
RequestExecutionLevel user ; << Required, you cannot use admin!
InstallDir "$ProgramFiles\${S_NAME}"
 
!include MUI2.nsh
!include UAC.nsh
 
!macro Init thing
uac_tryagain:
!insertmacro UAC_RunElevated
${Switch} $0
${Case} 0
	${IfThen} $1 = 1 ${|} Quit ${|} ;we are the outer process, the inner process has done its work, we are done
	${IfThen} $3 <> 0 ${|} ${Break} ${|} ;we are admin, let the show go on
	${If} $1 = 3 ;RunAs completed successfully, but with a non-admin user
		MessageBox mb_YesNo|mb_IconExclamation|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, try again" /SD IDNO IDYES uac_tryagain IDNO 0
	${EndIf}
	;fall-through and die
${Case} 1223
	MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "This ${thing} requires admin privileges, aborting!"
	Quit
${Case} 1062
	MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Logon service not running, aborting!"
	Quit
${Default}
	MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Unable to elevate, error $0"
	Quit
${EndSwitch}
 
SetShellVarContext all
!macroend
 
Function .onInit
!insertmacro Init "installer"
FunctionEnd
 
Function un.onInit
!insertmacro Init "uninstaller"
FunctionEnd
 
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION PageFinishRun
!insertmacro MUI_PAGE_FINISH
 
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
 
!insertmacro MUI_LANGUAGE "English"
 
 
Function PageFinishRun
; You would run "$InstDir\MyApp.exe" here but this example has no application to execute...
!insertmacro UAC_AsUser_ExecShell "" "$WinDir\notepad.exe" "" "" ""
FunctionEnd
 
Section
SetOutPath $InstDir
# TODO: File "MyApp.exe"
WriteUninstaller "$InstDir\Uninstall.exe"
SectionEnd
 
Section Uninstall
SetOutPath $Temp ; Make sure $InstDir is not the current directory so we can remove it
# TODO: Delete "$InstDir\MyApp.exe"
Delete "$InstDir\Uninstall.exe"
RMDir "$InstDir"
SectionEnd

Important Notes

  1. If you need to use the UAC plugin for the uninstaller as well, you will need to initalize the UAC plugin for the uninstaller, such as through un.onInit.
  2. The outer/user process does not display any output as to what occurred. For example, if you have the outer/user process create a shortcut, and it fails, the inner/admin process currently visible will not display anything to indicate that a problem occurred. This is because the outer/user process does not yet communicate back to the inner/admin process.
  3. When a standard or limited user supplies administrator information into the Run As dialog, you may experience permissions trouble with any extracted file. For example, if a Windows 2000 standard user supplies administrator info into the Run As dialog, and the NSIS installer extracts an .exe file, then trying to call that .exe through an Exec can fail. If this is a problem, you will want to use the AccessControl plug-in.