UAC plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(v0.2.2c)
Line 2: Line 2:


[[Category:Plugins]]
[[Category:Plugins]]
==Download & Info==
Télécharger == == & Info
This plug-in attempts to work around UAC installation problems on Vista/7. This plug-in allows your installer to operate with a user level process and an admin level process. This allows you to accomplish things that would otherwise be very difficult. For example, you can have an admin level installer launch another process at a user level. Or you can have an admin level installer create shortcuts at a user level.
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.


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 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).


Current branch: [http://stashbox.org/988128/UAC%20v0.2.2c%20-%2020100828.zip v0.2.2c]
branche courante: [% http://stashbox.org/988128/UAC% 20v0.2.2c 20 - 2020100828.zip% v0.2.2c]


Old branch: [http://stashbox.org/560965/UAC%20v0.0.11d.zip v0.0.11d]
branche vieillesse: [20v0.0.11d.zip% http://stashbox.org/560965/UAC v0.0.11d]


<font color=red style="border:2px solid red;display:block;">NOTE: All code on this page applies to the older version, the syntax has changed slightly for 0.2 and you should use the macros in uac.nsh</font>
<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>


===Basic installation===
=== === L'installation de base
To install the UAC plugin in your NSIS setup, you just need to copy two files from the above ZIP:
Pour installer le plugin UAC dans votre configuration NSIS, il vous suffit de copier deux fichiers ZIP de ce qui précède:


* For ANSI installers, copy '''UAC.nsh''' into your Include directory (e.g. C:\Program Files\NSIS\Include) and '''UAC.dll''' from Release/A into your Plugins directory (e.g. C:\Program Files\NSIS\Plugins).
* 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).


* For Unicode installers, copy '''UAC.nsh''' into your Include directory (e.g. C:\Program Files\NSIS\Unicode\Include) and '''UAC.dll''' from Release/U into your Plugins directory (e.g. C:\Program Files\NSIS\Unicode\Plugins).
* 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).


===How it works===
=== === Comment ça marche?


====Supplying the necessary code====
==== Fournir le code nécessaire ====
* First, the NSIS script must specify that it should run with user privileges, not admin privileges.
* Tout d'abord, le script NSIS doit préciser qu'il devrait fonctionner avec des privilèges d'utilisateur, et non pas des privilèges d'administrateur.


<highlight-nsis>
<highlight-nsis>
RequestExecutionLevel user    /* RequestExecutionLevel REQUIRED! */
utilisateur RequestExecutionLevel / * RequestExecutionLevel OBLIGATOIRE! * /
</highlight-nsis>
</ Highlight-nsis>
* Next, the most common approach is to let the UAC plugin initialize in the .onInit code:
* Ensuite, l'approche la plus commune est de laisser l'UAC plugin initialiser dans le code onInit.:
<highlight-nsis>
<highlight-nsis>
; Attempt to give the UAC plug-in a user process and an admin process.
; Tenter de donner l'UAC plug-in d'un processus utilisateur et un processus d'admin.
Function .OnInit
Fonction. OnInit


UAC_Elevate:
UAC_Elevate:
    UAC::RunElevated  
    UAC:: RunElevated
    StrCmp 1223 $0 UAC_ElevationAborted ; UAC dialog aborted by user?
    StrCmp 1223 0 $ UAC_ElevationAborted; de dialogue UAC interrompu par l'utilisateur?
    StrCmp 0 $0 0 UAC_Err ; Error?
    StrCmp 0 0 $ 0 UAC_Err; erreur?
    StrCmp 1 $1 0 UAC_Success ;Are we the real deal or just the wrapper?
    StrCmp 1 1 $ 0 UAC_Success; Sommes-nous la vraie affaire ou tout simplement l'enveloppe?
    Quit
    Quitter
   
    
UAC_Err:
UAC_Err:
    MessageBox mb_iconstop "Unable to elevate, error $0"
    MB_ICONSTOP MessageBox "Impossible d'élever, d'erreur $ 0"
    Abort
    Avorter


UAC_ElevationAborted:
UAC_ElevationAborted:
    # elevation was aborted, run as normal?
    # élévation a été abandonnée, fonctionner normalement?
    MessageBox mb_iconstop "This installer requires admin access, aborting!"
    MessageBox MB_ICONSTOP «Ce programme d'installation requiert un accès admin, abandon!"
    Abort
    Avorter


UAC_Success:
UAC_Success:
    StrCmp 1 $3 +4 ;Admin?
    StrCmp 1 3 $ 4; Admin?
    StrCmp 3 $1 0 UAC_ElevationAborted ;Try again?
    StrCmp 3 1 $ 0 UAC_ElevationAborted; Essayez à nouveau?
    MessageBox mb_iconstop "This installer requires admin access, try again"
    MessageBox MB_ICONSTOP «Ce programme d'installation requiert un accès admin, essayer à nouveau"
    goto UAC_Elevate  
    goto UAC_Elevate
   
    
FunctionEnd
FunctionEnd
</highlight-nsis>
</ Highlight-nsis>
* Before the installer exits, you will need to clean up the plugin. If you don't, it will leave behind a UAC.dll in the user's %TEMP% folder. One easy way to clean it up is by supplying the following:
* Avant la sortie d'installation, vous devrez nettoyer le plugin. Si vous n'avez pas, il laissera derrière lui une UAC.dll en% de l'utilisateur dossier% TEMP. Un moyen facile de nettoyer les dégâts est en fournissant le texte suivant:
<highlight-nsis>
<highlight-nsis>
Function .OnInstFailed
Fonction. OnInstFailed
    UAC::Unload ;Must call unload!
    UAC:: Décharger; doit appeler décharger!
FunctionEnd
FunctionEnd


Function .OnInstSuccess
Fonction. OnInstSuccess
    UAC::Unload ;Must call unload!
    UAC:: Décharger; doit appeler décharger!
FunctionEnd
FunctionEnd
</highlight-nsis>
</ Highlight-nsis>
Remember that if your installer quits before those events can be fired, you should supply a UAC::Unload before the installer quits.
Rappelez-vous que si votre installation se ferme avant que ces événements peuvent être déclenchés, vous devez fournir une UAC:: décharger avant le programme d'installation se ferme.


====How the UAC plug-in works with user and admin privileges====
==== Comment l'UAC plug-in fonctionne avec des privilèges d'utilisateur et admin ====
* When the NSIS installer launches, it has user privileges (as specified by RequestExecutionLevel user). Immediately, the NSIS installer calls its .onInit code. (Note, no window is visible yet at this point). The UAC plugin makes a ''second'' installer process and attempts to elevate it with admin privileges.   If needed, a UAC or Run As dialog is shown to help elevate this second process with admin privileges. At this point, if you open up Task Manager, you will see two installer processes running. The user process can be thought of as the outer process, and the admin process the inner process.
* Lorsque le programme d'installation lance NSIS, il a des privilèges d'utilisateur (tel que spécifié par l'utilisateur RequestExecutionLevel). Immédiatement, l'installateur NSIS appelle son code onInit.. (Note, aucune fenêtre n'est encore visible à ce stade). L'UAC plugin permet un processus de''deuxième''installateur et tente de l'élever avec des privilèges admin. Si nécessaire, un UAC ou Exécuter en tant que boîte de dialogue s'affiche pour aider à élever ce deuxième processus avec des privilèges admin. À ce stade, si vous ouvrez le Gestionnaire des tâches, vous verrez deux processus en cours d'installation. Le processus utilisateur peut être considéré comme le processus externe, et le processus de admin le processus interne.
* Once elevated, the admin/inner process will display. This is the installer window that users will see.
* Une fois élevés, l'admin / processus interne s'affiche. C'est la fenêtre d'installation que les utilisateurs verront.
* Now that you have an admin process, you can continue to let your script do its thing. If you ever need to do something at a user level, you do it through the UAC plugin, and the UAC plugin will run whats needed through the hidden user/outer process.   For example, UAC::Exec can execute something with user privileges and not admin privileges. Or UAC::ExecCodeSegment can execute an entire function with user privileges.
* Maintenant que vous avez un processus admin, vous pouvez continuer à laisser votre script faire sa chose. Si jamais vous avez besoin de faire quelque chose au niveau utilisateur, vous le faites par l'UAC plugin, et l'UAC plugin fonctionnera whats nécessaire par l'utilisateur invisible / processus externe. Par exemple, l'UAC:: Exec peut exécuter quelque chose avec des privilèges d'utilisateur et non pas des privilèges d'administrateur. Ou UAC:: ExecCodeSegment peut exécuter une fonction entière avec les privilèges utilisateur.


===Examples===
Exemples === ===
<font color="red">'''NOTE: Syntax has changed in 0.2 alphas, everything on this page uses the old syntax'''</font>
NOTE''<font color="red">: syntaxe a changé dans 0,2 alphas, tout sur cette page utilise la> vieille syntaxe'''</ police


Many examples are found in the .zip file above. If you want a better idea of what this plugin can do, study those examples. A brief overview of two simple examples are given here:
De nombreux exemples se trouvent dans le fichier. zip ci-dessus. Si vous voulez une meilleure idée de ce que ce plugin peut faire, étudier ces exemples. Un bref aperçu de deux exemples simples sont donnés ici:
====Creating a user shortcut====
==== Création d'un raccourci utilisateur ====


UAC_RealWorldExample.nsi does:
UAC_RealWorldExample.nsi ne:


<highlight-nsis>
<highlight-nsis>
Function CreateShortcuts
CreateShortcuts Fonction
  CreateShortcut "$Desktop\${APPNAME}.lnk" "$Windir\Notepad.exe"
  CreateShortcut "lnk $ Desktop \ $ {APPNAME}." "$ Windir \ Notepad.exe"
FunctionEnd
FunctionEnd


Section "Desktop Shortcut"
«Raccourci bureau» Section
  GetFunctionAddress $0 CreateShortcuts
  GetFunctionAddress $ 0 CreateShortcuts
  UAC::ExecCodeSegment $0
  UAC:: ExecCodeSegment 0 $
SectionEnd
SectionEnd
</highlight-nsis>
</ Highlight-INS>


In this example, we would want to run the CreateShortcuts function with user privileges, so it can create a user-level shortcut. So first, define the function.   Then use GetFunctionAddress to get the address of that function. Then, call UAC::ExecCodeSegment to ask the outer/user process to run that function.   Since the function will be run at a user level, it will create a shortcut for the user instead of for the administrator.
Dans cet exemple, nous voulons exécuter la fonction CreateShortcuts avec les privilèges utilisateur, il peut donc créer un raccourci au niveau utilisateur. Donc, premièrement, définir la fonction. Ensuite, utilisez GetFunctionAddress pour obtenir l'adresse de cette fonction. Ensuite, appelez UAC:: ExecCodeSegment de demander au processus utilisateur externe / pour exécuter cette fonction. Comme la fonction sera exécuté au niveau utilisateur, il va créer un raccourci pour l'utilisateur plutôt que pour l'administrateur.


====Launching an application with user privileges====
==== Lancement d'une application avec des privilèges utilisateur ====
<highlight-nsis>
<highlight-nsis>
; !insertmacro UAC_AsUser_ExecShell <Command> <File> <Parameters> <WorkingDir> <ShowWindow>
;! Insertmacro UAC_AsUser_ExecShell <Command> <Fichier> <Paramètres> <WorkingDir> <ShowWindow>
!insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\${APPFILE}' '-firstrun' '$INSTDIR' ''
! Insertmacro UAC_AsUser_ExecShell 'ouverte' $ INSTDIR \ $ {} APPFILE '-FirstRun' $ INSTDIR'''
</highlight-nsis>
</ Highlight-nsis>


Where $INSTDIR\${APPFILE} is the path to the file you want to launch.
Lorsque $ INSTDIR \ $ {} APPFILE est le chemin vers le fichier que vous souhaitez lancer.


If you use the MUI skin and have the installer launch the app for you, you will need to do a little more work.
Si vous utilisez la peau MUI et le lancement d'installation de l'application pour vous, vous aurez besoin pour faire un peu plus de travail.


<highlight-nsis>
<highlight-nsis>
!define MUI_FINISHPAGE_RUN
! Définir MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION ExecAppFile
! Définir MUI_FINISHPAGE_RUN_FUNCTION ExecAppFile


Function ExecAppFile  
Fonction ExecAppFile
    !insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\${APPFILE}' '-firstrun' '$INSTDIR' ''
    ! Insertmacro UAC_AsUser_ExecShell 'ouverte' $ INSTDIR \ $ {} APPFILE '-FirstRun' $ INSTDIR'''
FunctionEnd
FunctionEnd
</highlight-nsis>
</ Highlight-nsis>


Keep in mind that you still have to define MUI_FINISHPAGE_RUN (as empty) otherwise MUI won't provide the option at all.
Gardez à l'esprit que vous avez encore à définir MUI_FINISHPAGE_RUN (comme vide) sinon MUI ne fournira pas l'option à tous.


===Important Notes===
=== === Notes importantes


# 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. Remember to run clean it up with UAC::Unload before your uninstaller exits. Great places to clean it up are un.OnUnInstFailed and un.OnUnInstSuccess
# Si vous avez besoin d'utiliser l'UAC plugin pour le programme de désinstallation, ainsi, vous aurez besoin d'initialiser l'UAC plugin pour le programme de désinstallation, comme par un.onInit. N'oubliez pas d'exécuter le nettoyer avec l'UAC:: décharger avant votre sortie de désinstallation. Bonnes adresses pour le nettoyer sont un.OnUnInstFailed et un.OnUnInstSuccess
# 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.
# Le processus utilisateur externe / n'affiche pas de sortie de ce qui s'est passé. Par exemple, si vous avez le processus utilisateur externe / créer un raccourci, et il échoue, l'intérieur / admin processus actuellement visible n'affichera rien pour indiquer qu'un problème est survenu. C'est parce que le processus utilisateur externe / ne pas encore communiquer de retour à l'intérieur / admin processus.
# 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]].
# Quand un utilisateur standard ou de l'information limitée administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que, vous pouvez éprouver l'ennui avec les permissions du fichier extrait. Par exemple, si un Windows 2000 standard info administrateur utilisateur fournit dans la boîte de dialogue Exécuter en tant que, et l'installateur NSIS extrait un fichier. Exe, puis essayez d'appeler cela. Exe par un Exec peut échouer. S'il s'agit d'un problème, vous souhaitez utiliser le [[AccessControl_plug-en | AccessControl plug-in]].


===Tested Environments===
=== === Environnements testés


This plugin has been tested under the following environments:
Ce plugin a été testé dans les environnements suivants:


* Windows 7 - UAC On - Administrator
* Windows 7 - UAC Le - Administrateur
* Windows Vista - UAC On - Administrator
* Windows Vista - UAC Le - Administrateur
* Windows Vista - UAC Off - Administrator
* Windows Vista - UAC Off - Administrateur
* Windows Vista - UAC On - Standard User - User supplies administrator info into the UAC dialog
* Windows Vista - UAC Le - Standard User - info utilisateur de l'administrateur des approvisionnements dans la boîte de dialogue UAC
* Windows Vista - UAC On - Standard User - User does not supply administrator info into the UAC dialog
* Windows Vista - UAC Le - Standard utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue UAC
* Windows Vista - UAC Off - Standard User - User supplies administrator info into the Run As dialog
* Windows Vista - UAC Off - Standard User - info utilisateur de l'administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que
* Windows Vista - UAC Off - Standard User - User does not supply administrator info into the Run As dialog
* Windows Vista - UAC Off - Standard utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue Exécuter en tant que
* Windows XP - Administrator
* Windows XP - Administrateur
* Windows XP - Limited User - User supplies administrator info into the Run As dialog
* Windows XP - Limited utilisateur - info utilisateur de l'administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que
* Windows XP - Limited User - User does not supply administrator info into the Run As dialog
* Windows XP - Limited utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue Exécuter en tant que
* Windows 2000 - Administrator
Windows * 2000 - Administrateur
* Windows 2000 - Standard User - User supplies administrator info into the Run As dialog
* Windows 2000 - User Standard - info utilisateur de l'administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que
* Windows 2000 - Standard User - User does not supply administrator info into the Run As dialog
* Windows 2000 - Standard utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue Exécuter en tant que
* Windows 95 & 98 were tested in early builds and hopefully still work (No elevation here for obvious reasons)
* Windows 95 & 98 ont été testés au début de fabrique et nous espérons encore du travail (n ° d'élévation ici pour des raisons évidentes)


Windows ME & NT4 are untested, but should work. (If you have tested on one of these OS'es, please report results here or on the forum)
Windows ME et NT4 n'ont pas été testées, mais devrait fonctionner. (Si vous avez testé sur un de ces OS'es, s'il vous plaît rendre compte des résultats ici ou sur le forum)

Revision as of 12:48, 24 October 2010

Author: Anders (talk, contrib)


Télécharger == == & Info 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 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]

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>

=== === 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.nshcopier dans votre répertoire d'inclusion (par exemple C: \ Program Files \ NSIS \ Include) etUAC.dll chez sortie / A dans votre répertoire de plugins ( par exemple C: \ Program Files \ NSIS \ Plugins).
  • Pour les installateurs Unicode,UAC.nshcopier dans votre répertoire d'inclusion (par exemple C: \ Program Files \ NSIS \ Unicode \ Include) etUAC.dll chez sortie / U dans votre Plugins répertoire (par exemple C: \ Program Files \ NSIS \ Unicode \ Plugins).

=== === Comment ça marche?

Fournir le code nécessaire

  • Tout d'abord, le script NSIS doit préciser qu'il devrait fonctionner avec des privilèges d'utilisateur, et non pas des privilèges d'administrateur.

<highlight-nsis> utilisateur RequestExecutionLevel / * RequestExecutionLevel OBLIGATOIRE! * / </ Highlight-nsis>

  • Ensuite, l'approche la plus commune est de laisser l'UAC plugin initialiser dans le code onInit.:

<highlight-nsis>

Tenter de donner l'UAC plug-in d'un processus utilisateur et un processus d'admin.

Fonction. OnInit

UAC_Elevate:     UAC:: RunElevated     StrCmp 1223 0 $ UAC_ElevationAborted; de dialogue UAC interrompu par l'utilisateur?     StrCmp 0 0 $ 0 UAC_Err; erreur?     StrCmp 1 1 $ 0 UAC_Success; Sommes-nous la vraie affaire ou tout simplement l'enveloppe?     Quitter      UAC_Err:     MB_ICONSTOP MessageBox "Impossible d'élever, d'erreur $ 0"     Avorter

UAC_ElevationAborted:     # élévation a été abandonnée, fonctionner normalement?     MessageBox MB_ICONSTOP «Ce programme d'installation requiert un accès admin, abandon!"     Avorter

UAC_Success:     StrCmp 1 3 $ 4; Admin?     StrCmp 3 1 $ 0 UAC_ElevationAborted; Essayez à nouveau?     MessageBox MB_ICONSTOP «Ce programme d'installation requiert un accès admin, essayer à nouveau"     goto UAC_Elevate      FunctionEnd </ Highlight-nsis>

  • Avant la sortie d'installation, vous devrez nettoyer le plugin. Si vous n'avez pas, il laissera derrière lui une UAC.dll en% de l'utilisateur dossier% TEMP. Un moyen facile de nettoyer les dégâts est en fournissant le texte suivant:

<highlight-nsis> Fonction. OnInstFailed     UAC:: Décharger; doit appeler décharger! FunctionEnd

Fonction. OnInstSuccess     UAC:: Décharger; doit appeler décharger! FunctionEnd </ Highlight-nsis> Rappelez-vous que si votre installation se ferme avant que ces événements peuvent être déclenchés, vous devez fournir une UAC:: décharger avant le programme d'installation se ferme.

Comment l'UAC plug-in fonctionne avec des privilèges d'utilisateur et admin

  • Lorsque le programme d'installation lance NSIS, il a des privilèges d'utilisateur (tel que spécifié par l'utilisateur RequestExecutionLevel). Immédiatement, l'installateur NSIS appelle son code onInit.. (Note, aucune fenêtre n'est encore visible à ce stade). L'UAC plugin permet un processus dedeuxièmeinstallateur et tente de l'élever avec des privilèges admin. Si nécessaire, un UAC ou Exécuter en tant que boîte de dialogue s'affiche pour aider à élever ce deuxième processus avec des privilèges admin. À ce stade, si vous ouvrez le Gestionnaire des tâches, vous verrez deux processus en cours d'installation. Le processus utilisateur peut être considéré comme le processus externe, et le processus de admin le processus interne.
  • Une fois élevés, l'admin / processus interne s'affiche. C'est la fenêtre d'installation que les utilisateurs verront.
  • Maintenant que vous avez un processus admin, vous pouvez continuer à laisser votre script faire sa chose. Si jamais vous avez besoin de faire quelque chose au niveau utilisateur, vous le faites par l'UAC plugin, et l'UAC plugin fonctionnera whats nécessaire par l'utilisateur invisible / processus externe. Par exemple, l'UAC:: Exec peut exécuter quelque chose avec des privilèges d'utilisateur et non pas des privilèges d'administrateur. Ou UAC:: ExecCodeSegment peut exécuter une fonction entière avec les privilèges utilisateur.

Exemples === === NOTE: syntaxe a changé dans 0,2 alphas, tout sur cette page utilise la> vieille syntaxe'</ police

De nombreux exemples se trouvent dans le fichier. zip ci-dessus. Si vous voulez une meilleure idée de ce que ce plugin peut faire, étudier ces exemples. Un bref aperçu de deux exemples simples sont donnés ici:

Création d'un raccourci utilisateur

UAC_RealWorldExample.nsi ne:

<highlight-nsis> CreateShortcuts Fonction   CreateShortcut "lnk $ Desktop \ $ {APPNAME}." "$ Windir \ Notepad.exe" FunctionEnd

«Raccourci bureau» Section   GetFunctionAddress $ 0 CreateShortcuts   UAC:: ExecCodeSegment 0 $ SectionEnd </ Highlight-INS>

Dans cet exemple, nous voulons exécuter la fonction CreateShortcuts avec les privilèges utilisateur, il peut donc créer un raccourci au niveau utilisateur. Donc, premièrement, définir la fonction. Ensuite, utilisez GetFunctionAddress pour obtenir l'adresse de cette fonction. Ensuite, appelez UAC:: ExecCodeSegment de demander au processus utilisateur externe / pour exécuter cette fonction. Comme la fonction sera exécuté au niveau utilisateur, il va créer un raccourci pour l'utilisateur plutôt que pour l'administrateur.

Lancement d'une application avec des privilèges utilisateur

<highlight-nsis>

! Insertmacro UAC_AsUser_ExecShell <Command> <Fichier> <Paramètres> <WorkingDir> <ShowWindow>

! Insertmacro UAC_AsUser_ExecShell 'ouverte' $ INSTDIR \ $ {} APPFILE '-FirstRun' $ INSTDIR </ Highlight-nsis>

Lorsque $ INSTDIR \ $ {} APPFILE est le chemin vers le fichier que vous souhaitez lancer.

Si vous utilisez la peau MUI et le lancement d'installation de l'application pour vous, vous aurez besoin pour faire un peu plus de travail.

<highlight-nsis> ! Définir MUI_FINISHPAGE_RUN ! Définir MUI_FINISHPAGE_RUN_FUNCTION ExecAppFile

Fonction ExecAppFile     ! Insertmacro UAC_AsUser_ExecShell 'ouverte' $ INSTDIR \ $ {} APPFILE '-FirstRun' $ INSTDIR FunctionEnd </ Highlight-nsis>

Gardez à l'esprit que vous avez encore à définir MUI_FINISHPAGE_RUN (comme vide) sinon MUI ne fournira pas l'option à tous.

=== === Notes importantes

  1. Si vous avez besoin d'utiliser l'UAC plugin pour le programme de désinstallation, ainsi, vous aurez besoin d'initialiser l'UAC plugin pour le programme de désinstallation, comme par un.onInit. N'oubliez pas d'exécuter le nettoyer avec l'UAC:: décharger avant votre sortie de désinstallation. Bonnes adresses pour le nettoyer sont un.OnUnInstFailed et un.OnUnInstSuccess
  2. Le processus utilisateur externe / n'affiche pas de sortie de ce qui s'est passé. Par exemple, si vous avez le processus utilisateur externe / créer un raccourci, et il échoue, l'intérieur / admin processus actuellement visible n'affichera rien pour indiquer qu'un problème est survenu. C'est parce que le processus utilisateur externe / ne pas encore communiquer de retour à l'intérieur / admin processus.
  3. Quand un utilisateur standard ou de l'information limitée administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que, vous pouvez éprouver l'ennui avec les permissions du fichier extrait. Par exemple, si un Windows 2000 standard info administrateur utilisateur fournit dans la boîte de dialogue Exécuter en tant que, et l'installateur NSIS extrait un fichier. Exe, puis essayez d'appeler cela. Exe par un Exec peut échouer. S'il s'agit d'un problème, vous souhaitez utiliser le AccessControl plug-in.

=== === Environnements testés

Ce plugin a é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 - info utilisateur de l'administrateur des approvisionnements dans la boîte de dialogue UAC
  • Windows Vista - UAC Le - Standard utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue UAC
  • Windows Vista - UAC Off - Standard User - info utilisateur de l'administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que
  • Windows Vista - UAC Off - Standard utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue Exécuter en tant que
  • Windows XP - Administrateur
  • Windows XP - Limited utilisateur - info utilisateur de l'administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que
  • Windows XP - Limited utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue Exécuter en tant que

Windows * 2000 - Administrateur

  • Windows 2000 - User Standard - info utilisateur de l'administrateur d'approvisionnements dans la boîte de dialogue Exécuter en tant que
  • Windows 2000 - Standard utilisateur - ne fournit pas d'informations d'administrateur dans la boîte de dialogue Exécuter en tant que
  • Windows 95 & 98 ont été testés au début de fabrique et nous espérons encore du travail (n ° d'élévation ici pour des raisons évidentes)

Windows ME et NT4 n'ont pas été testées, mais devrait fonctionner. (Si vous avez testé sur un de ces OS'es, s'il vous plaît rendre compte des résultats ici ou sur le forum)