web-dev-qa-db-fra.com

Forcer un programme à s'exécuter * sans * privilèges d'administrateur ou UAC?

Existe-t-il un moyen de forcer un programme nécessitant normalement des privilèges d’administrateur (via UAC) à s’exécuter sans eux? (c'est-à-dire: pas d'invite UAC et pas d'accès à l'échelle du système .)

Ajouté: Sans modifier l'exécutable lui-même.


En dépit de la réponse de James, j'ai trouvé plusieurs façons de le faire presque peut être fait:

  1. En modifiant l'exécutable, je peux supprimer l'entrée trustInfo du manifeste (ou du manifeste, afin de pouvoir utiliser une entrée externe), permettant ainsi au programme de démarrer sans UAC. Malheureusement, cela modifie l'exécutable, donc il se ferme peu de temps après en raison d'un test de somme de contrôle interne.
  2. En utilisant Process Explorer, je peux le lancer en tant qu’utilisateur limité. Cependant, cela semble le limiter beaucoup plus que je le souhaiterais (il fonctionne comme le mode protégé IE et peut donc accéder beaucoup moins que ce que mon utilisateur standard non élevé peut obtenir).
113
Andrew Russell
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell\forcerunasinvoker]
@="Run without privilege elevation"

[HKEY_CLASSES_ROOT\*\Shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

Enregistrez ce texte dans <name_of_file>.reg et ajoutez-le au registre Windows. (Double-cliquez dessus devrait faire l'affaire.)

Ensuite, cliquez avec le bouton droit de la souris sur l'application que vous souhaitez exécuter sans privilèges administratifs et sélectionnez "Exécuter sans élévation de privilèges".

Dans certains cas, une petite quantité de 0,1% des programmes peut poser deux fois des questions sur UAC Prompt.

68
Vom

Enregistrer dans nonadmin.bat:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Maintenant, vous pouvez glisser et déposer des programmes sur ceci pour les exécuter sans admin.

Cela ne nécessite pas de privilèges d'administrateur, contrairement à la modification de cette clé de registre. De plus, vous n'encombrerez pas le menu contextuel.

Basé sur Vom's answer


Update: Devrait maintenant fonctionner avec les programmes qui ont également des espaces dans name.

48
Hjulle

J'espère que je ne serai pas trop en retard pour la fête, mais je cherchais une question similaire et sans voir de réponse ici, j'ai découvert que la commande RunAs intégrée de Windows, exécutée en tant qu'administrateur, peut le faire avec le commutateur /trustlevel.

RUNAS /trustlevel:<TrustLevel> program

/showtrustlevels  displays the trust levels that can be used
                  as arguments to /trustlevel.
/trustlevel       <Level> should be one of levels enumerated
                  in /showtrustlevels.

Cela a fonctionné dans mon cas. Ironiquement, lancer un programme explicitement sans élévation nécessite une commande élevée Invite . Allez comprendre. :) J'espère que ça t'aide.

33
Mxx

Si vous avez toujours une application à exécuter sans UAC, vous pouvez la cibler avec le registre (ajoutez le texte dans un fichier REG et importez-le dans le registre):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

Contrairement à cette réponse , cette solution ne nécessite aucun clic ou changement d’interaction avec l’utilisateur.

Microsoft appelle ce processus en ajoutant la variable RunAsInvoker"Compatibility Shim" .

13
palswim

J'ai résolu ce problème aujourd'hui à l'aide de la boîte à outils de personnalisation d'applications MS.

J'ai suivi les instructions dans un article de Tech Republic .

Fondamentalement:

1) vous obtenez la boîte à outils de MS ici .

2) Cliquez sur Fix

3) Choisissez l’option RunAsInvoker

4) Faites un clic droit sur le correctif et choisissez Installer

3
user53639

Dans sa question, Andrew a déclaré que les solutions suivantes ne fonctionnaient pas vraiment:

En modifiant l'exécutable, je peux supprimer l'entrée trustInfo du manifeste (ou du manifeste, afin de pouvoir utiliser une entrée externe), ce qui permet au programme de démarrer sans UAC. Malheureusement, cela modifie l'exécutable, donc il se ferme peu de temps après en raison d'un test de somme de contrôle interne.

J'ai pu modifier et modifier un fichier externe .manifest pour le logiciel que j'utilisais

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

à

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

Il s'avère que le logiciel que j'utilisais ne nécessitait pas vraiment de droits d'administrateur. J'ai donc pu l'exécuter sur un compte d'utilisateur standard sans mot de passe UAC ni administrateur. Merci!

1
Aurimas