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


Est-il possible de forcer un programme qui nécessite normalement des privilèges d'administrateur (via UAC) à s'exécuter sans eux? (c.-à-d. pas d'invite UAC et pas d'accès à l'échelle du système.)

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


Malgré la réponse de James, j'ai trouvé quelques moyens presque être terminé:

  1. En modifiant l'exécutable je peux supprimer le trustInfo entrée du manifeste (ou le manifeste entièrement, donc je peux utiliser un externe), permettant 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 de manière significative par rapport à ce que je souhaiterais (il fonctionne comme IE en mode protégé et peut donc accéder à beaucoup moins que ce que peut faire un utilisateur non élevé).

102
2017-08-04 13:49


origine


Vous spécifiez de ne pas modifier l'exécutable, mais la modification du fichier .exe est l'une de vos tentatives? - cutrightjm
@ekaj j'ai seulement spécifié que après J'ai découvert que ça ne marcherait pas;) - Andrew Russell
Pourriez-vous peut-être spécifier le programme, même si vous ne l'utilisez plus? Cela pourrait aider les gens à savoir ce qu’il essaie d’accéder qui nécessite des privilèges d’administrateur - cutrightjm
@ekaj malheureusement pas. Cependant, ce n'est pas particulièrement pertinent: UAC est déclenché par un programme demandant une élévation lors de la création du processus (la manière habituelle - comme dans ce cas - est avec un manifeste). Une fois qu'un processus est démarré, il ne peut plus modifier son statut d'élévation, quelles que soient les ressources limitées auxquelles il tente d'accéder. - Andrew Russell
Si un programme n'a pas de manifeste et refuse de s'exécuter sans privilèges d'administrateur, cela est probablement dû à la détection du programme d'installation UAC. J'ai posté cette question et misha256 a une bonne solution. Je l'ai testé et je peux confirmer que cela fonctionne. superuser.com/questions/857616/... J'ai fait des recherches et j'ai trouvé qu'il n'y avait aucune raison d'exister pour la détection de l'installateur. Notez que si les privilèges d'administrateur sont dus à une entrée trustinfo dans un manifeste, cela ne fonctionnera évidemment pas. - user1258361


Réponses:


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 l'ajouter au registre Windows. (Double-cliquer dessus devrait faire l'affaire.)

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

Dans certains cas, une petite quantité de 0,1% des programmes peut demander deux fois l'invite UAC.


61
2017-07-18 15:20



J'avais l'habitude d'utiliser le shim d'Application Compatibility Toolkit, mais c'était beaucoup de travail pour chaque exécutable et n'importe quel courrier indésirable dans le registre pour chaque fichier. Cette méthode fonctionne et je l'aime beaucoup mieux. - Ben Voigt
Accepter cela car cela semble être la méthode la plus simple, et j'ai (enfin!) a pu le vérifier. A aussi la très belle propriété d’être trivialement utilisable en tant que ligne de commande unique " et ensuite tourner \" dans "). - Andrew Russell
@Vom - Connaissez-vous un moyen facile d'obtenir des programmes passés qui demandent plusieurs fois? Merci! - Derek
J'ai le même problème que @Derek, l'application semble constamment redemander de l'UAC, je ne lui fais pas confiance avec un accès au système mais j'ai besoin de ses fonctionnalités. - Gizmo
@ jpmc26 je pense que le /min est une erreur La solution fonctionne exactement de la même façon sans elle. Vom a dû se mêler cmd et start commutateurs. Il paraît que cmd.exe ne se plaint pas de mauvais commutateurs. Essayer cmd /whatever, par exemple. - cdlvcdlv


Enregistrer dans nonadmin.bat:

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

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

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

Basé sur Vom's répondre


Mettre à jour: Devrait maintenant fonctionner avec des programmes qui ont des espaces dans le nom aussi.


34
2017-10-02 11:27



Je l'ai essayé sur certains programmes nécessitant un accès sur mes disques et il ne pouvait pas les détecter ou ne fonctionnait pas en premier lieu: / (rufus rufus.akeo.ie par exemple) - keinabel
@keinabel C'est probablement parce qu'ils ont vraiment besoin d'admin pour fonctionner. Ce script est destiné aux programmes qui requièrent des privilèges d’administrateur sans faire réellement quelque chose qui le nécessite. L'accès brut aux lecteurs est une chose admin typique. - Hjulle
Génial! A pu installer XAMPP en utilisant cette méthode. - Krishnaraj
Cela ne semble pas fonctionner pour moi pour les exécutables du répertoire "C: \ Program Files \ ...". J'ai un Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again. J'ai essayé cette commande manuellement à plusieurs reprises avec de légères variations et sans chance. Des idées? - Jake Smith
J'ai eu le même problème avec l'emplacement du fichier étant dans un dossier avec des espaces. Résolu en supprimant quelques guillemets: cmd / min / C "set __COMPAT_LAYER = RUNASINVOKER && start" "% 1" - ragnar


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

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 invite de commande élevée. Allez comprendre. :) J'espère que ça t'aide.


31
2018-01-05 08:15



Je peux confirmer que cela ne fonctionne pas. Je viens de le tester et j'ai une erreur: "ERREUR RUNAS: Impossible à exécuter - (nom du programme ici). L'opération demandée nécessite une élévation". - user1258361
@ user1258361 vous devez exécuter cette commande depuis l'invite élevée, comme je l'ai écrit en gras ... - Mxx
Il ne semble pas nécessiter une invite élevée sur Windows 7 ... - SamB
Testé avec une invite élevée, utilisé runas / trustlevel en ligne de commande: 0x20000 (programme), le programme a quand même été exécuté en tant qu'administrateur. Pour référence, 0x20000 est l'utilisateur de base. - user1258361
nécessite une invite de commande élevée... bien sûr que oui. Sinon vous êtes déjà sans droits d’administrateur et sans aucun processus, ils en manqueront également. - Twisty Impersonator


Si vous souhaitez toujours exécuter une application particulière 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 autre clic ni modification de l'interaction de l'utilisateur.

Microsoft appelle ce processus en ajoutant le RunAsInvoker  "Compatibilité Shim".


9
2017-09-09 20:16



La réponse à une question différente mais liée fourni l'inspiration pour cette réponse. - palswim
Merci beaucoup! C'était la seule chose qui marchait pour moi! J'avais une application qui était appelée depuis le menu contextuel de Windows, et elle apparaissait toujours en tant qu'administrateur, même si elle était appelée de partout. Après ce correctif, l'application a commencé à être appelée correctement. - user
Je vous remercie. L'autre solution a bien fonctionné pour moi, mais il est bon de voir comment le mécanisme sous-jacent utilisé par les cales est appliqué à un exécutable. - 0xC0000022L


J'ai résolu ce problème aujourd'hui en utilisant le toolkit de personnalisation des applications MS.

J'ai suivi les instructions dans un article de la république technique: http://www.techrepublic.com/blog/window-on-windows/selectively-disable-uac-for-your-trusted-vista-applications/635

Fondamentalement:

1) vous obtenez la prise de MS ici .

2) Cliquez sur Fix

3) Choisissez le RunAsInvoker option

4) Cliquez droit sur le correctif et choisissez Installer


2
2018-05-18 01:05



Votre réponse fait exactement le contraire de l'effet désiré. La question initiale était de savoir comment forcer une application qui demande des privilèges élevés à s'exécuter sans augmenter. Votre réponse utilise toujours UAC mais désactive simplement cette invite. C'est une mauvaise réponse à cette question. - Mxx
@mxx en fait non. Si l'utilisateur actuel est limité (ou si vous avez activé le contrôle de compte d'utilisateur), le processus se lancera avec des privilèges limités. - LogicDaemon
@LogicDaemon Si vous lisez réellement l'article, vous verrez que cela explique que si vous suivez ces étapes, vous exécuterez une application en tant qu'administrateur sans invite UAC. Ceci est à l'opposé de ce que OP a demandé. - Mxx
@ mxx Nope. Continuer à lire technet ce que font réellement RunAsInvoker. C'est en effet ce que demandait le site, bien que cela ne fonctionne que pour les anciennes applications. - LogicDaemon
Tant que l'explorateur, un cmd non-admin ou tout autre processus standard est le parent, RunAsInvoker s'exécutera avec les mêmes droits limités. (Explorer est limité par défaut, sinon il ne vous demanderait jamais de vous élever pour supprimer un fichier.) Il semble en fait fonctionner même avec de nouvelles applications. RunAsInvoker signifie qu'il hérite exactement du même jeton ACL. - SilverbackNet


J'ai résolu ce problème en modifiant les autorisations sur le dossier contenant le programme.

J'ai ajouté chaque utilisateur qui exécutera ce programme et leur a donné des privilèges de «contrôle total». Cela a pris en charge le problème et j'ai laissé le "run as admin" décoché.

Je n'ai aucun problème de sécurité pour les utilisateurs qui exécuteront le programme.


0
2018-04-20 04:28





Dans sa question, Andrew a déclaré que ce qui suit ne fonctionnait pas tout à fait:

En modifiant l'exécutable, je peux supprimer l'entrée trustInfo du   manifeste (ou le manifeste entièrement, donc je peux utiliser un externe),   permettre au programme de démarrer sans UAC. Malheureusement cela modifie   l'exécutable, donc il quitte peu de temps après en raison d'une somme de contrôle interne   tester.

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

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

à

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

Il s'avère que le logiciel que j'utilisais n'exigeait pas vraiment de droits d'administrateur, alors j'ai pu l'exécuter sur un compte d'utilisateur standard sans mots de passe UAC ou administrateur. Merci!


0
2017-07-21 02:56





Non, si un programme nécessite le contrôle de compte d'utilisateur, il essaie d'accéder à quelque chose en dehors de son bac à sable. Le programme ne fonctionnera pas correctement sans l’accès élevé.

Si vous voulez simplement vous débarrasser de la notification, vous pouvez désactiver l'UAC.

Désactiver le contrôle de compte d'utilisateur sur Windows Vista: Démarrer, tapez "utilisateur". Cliquez sur "Comptes d'utilisateurs". Dans la fenêtre qui apparaît, cliquez sur "Paramètres de contrôle de compte d'utilisateur", puis désactivez l'option UAC.

Désactiver UAC sur Windows 7: Démarrer, tapez "user". Cliquez sur "Paramètres de contrôle de compte d'utilisateur". Faites glisser la barre de choix tout en bas pour "Ne jamais avertir".


-3
2017-08-04 14:09



Désactiver UAC n'est pas ce que j'essaie de réaliser. En outre: votre description de la façon dont fonctionne le contrôle de compte d'utilisateur n'est correcte que dans un sens général. Il est possible qu'un programme demande le contrôle de compte d'utilisateur lorsqu'il n'en a pas strictement besoin. Et l'UAC se produit avant le démarrage d'un programme - une fois qu'il s'exécute, s'il dépasse ses autorisations, il obtient simplement des erreurs sans autorisation. - Andrew Russell
La sémantique mise à part, vous ne pouvez pas "désactiver" les notifications UAC pour un programme spécifique tout en limitant leur accès. - James Watt
James: En fait - on dirait que tu peux - j'ai mis à jour ma question. - Andrew Russell
À moins de modifier le code du programme lui-même, je serais intéressé de connaître une solution de travail si vous en trouvez une. - James Watt