UAC plug-in: Difference between revisions
(v0.2.2c) |
|||
Line 2: | Line 2: | ||
[[Category:Plugins]] | [[Category:Plugins]] | ||
== | 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 [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 | <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> | ||
=== | === === 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). | ||
* | * 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? | ||
==== | ==== 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> | <highlight-nsis> | ||
RequestExecutionLevel | 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> | <highlight-nsis> | ||
; | ; Tenter de donner l'UAC plug-in d'un processus utilisateur et un processus d'admin. | ||
Fonction. OnInit | |||
UAC_Elevate: | 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: | UAC_Err: | ||
    MB_ICONSTOP MessageBox "Impossible d'élever, d'erreur $ 0" | |||
    Avorter | |||
UAC_ElevationAborted: | 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: | 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 | 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> | <highlight-nsis> | ||
Fonction. OnInstFailed | |||
    UAC:: Décharger; doit appeler décharger! | |||
FunctionEnd | FunctionEnd | ||
Fonction. OnInstSuccess | |||
    UAC:: Décharger; doit appeler décharger! | |||
FunctionEnd | 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 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. | ||
* | * 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 === === | ||
<font color="red"> | NOTE''<font color="red">: 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 | UAC_RealWorldExample.nsi ne: | ||
<highlight-nsis> | <highlight-nsis> | ||
CreateShortcuts Fonction | |||
  CreateShortcut "lnk $ Desktop \ $ {APPNAME}." "$ Windir \ Notepad.exe" | |||
FunctionEnd | FunctionEnd | ||
Section | «Raccourci bureau» Section | ||
  GetFunctionAddress $ 0 CreateShortcuts | |||
  UAC:: ExecCodeSegment 0 $ | |||
SectionEnd | 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> | <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> | <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 | 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 | ||
# | # 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 | ||
# | # 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. | ||
# | # 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]]. | ||
=== | === === Environnements testés | ||
Ce plugin a été testé dans les environnements suivants: | |||
* Windows 7 - UAC | * Windows 7 - UAC Le - Administrateur | ||
* Windows Vista - UAC | * Windows Vista - UAC Le - Administrateur | ||
* Windows Vista - UAC Off - | * Windows Vista - UAC Off - Administrateur | ||
* Windows Vista - UAC | * Windows Vista - UAC Le - Standard User - info utilisateur de l'administrateur des approvisionnements dans la boîte de dialogue UAC | ||
* Windows Vista - 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 - | * 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 | * 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 - | * Windows XP - Administrateur | ||
* Windows XP - Limited | * 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 | * 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 - Standard | * 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 | * 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 | * 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 | 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
- 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
- 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.
- 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)