Empêcher l'altitude (UAC) pour une application qui n'en a pas besoin [dupliquer]


34

Cette question a déjà une réponse ici:

Ayant récemment migré de Vista 32 bits vers Windows 7 64 bits, l'un de mes programmes nécessite désormais des droits d'administrateur.

J'utilise un éditeur de texte plutôt exotique (Crimson Editor). Bien que non conçu pour Vist / Win7, il fonctionnait bien avec Vista. Mais sous Windows 7, l’exécutable du programme obtient ce bouclier UAC ajouté à son icône (même si l’indicateur "Exécuter en tant qu’administrateur" dans l’onglet de compatibilité n’est pas défini) et demande une élévation à chaque fois que je le lance.

Comment Win7 détermine-t-il que cette application du type bloc-notes a besoin de droits d'administrateur? Comment puis-je remplacer cette fausse heuristique?

Réponses:


22

Non, la raison pour laquelle Crimson Editor le fait n'est PAS parce qu'il n'est pas signé. (Et ce n'est pas nouveau pour Win7). C'est parce que le manifeste d'application, qui est incorporé au moment de la compilation, le spécifie requestedPrivilegeLevel="highestLevel".

Selon cet article du forum , les développeurs de Crimson Editor ont changé cela dans la révision 237-241. Ils l'ont fait parce que la fonctionnalité "Ajouter Crimson Editor aux menus contextuels du shell" nécessite des privilèges d'administrateur.

La solution à long terme serait que les développeurs de Crimson Editor corrigent leur manifeste d'application. Ils doivent s’ajouter eux-mêmes aux menus contextuels du shell lors de l’installation, ou au moins dire aux utilisateurs qu’ils doivent exécuter manuellement l’application élevée (ce qui est facile à faire) au lieu de la demander.

Pour toutes les applications ayant requestedPrivilegeLevel="highestLevel"dans leur manifeste (utilisez Manifest View pour afficher les manifestes d'application), vous pouvez utiliser Application Compatibility Toolkit de Microsoft pour délimiter l'application avec le correctif RunAsInvoker, ce qui oblige l'application à s'exécuter avec vos jetons d'utilisateur standard.

Pour plus d'informations sur l'utilisation d'Application Compatibility Toolkit, consultez cet article sur son application à Crimson Editor, ou des instructions générales .


1
Vous pouvez également remplacer le manifeste existant à l’aide de l’outil mt.exe de la ligne de commande, que vous pouvez obtenir gratuitement avec Visual Studio Express (long mais qui en vaut la peine si vous rencontrez beaucoup ce problème). Notez que le remplacement du manifeste incorporé modifiera le fichier .exe: a) assurez-vous donc que vous en avez une copie au cas où vous cassez des documents et b) si le document est signé, vous rompez la signature (mais il semble dans ce cas déjà déterminé qu'il est non signé de toute façon).
AdamV

the.d.stro, vous êtes une bouée de sauvetage, ça marche très bien.
phloopy

1
+1 pour "corriger leur application" et utiliser la boîte à outils AppCompat pour corriger leurs bugs.
Ian Boyd

13

J'ai trouvé que j'avais deux applications qui avaient ce problème. L'un avait «update» dans le nom du fichier et l'autre «update» dans la «FileDecsription». J'ai simplement supprimé le mot 'update' de ces deux applications et plus aucun avertissement UAC. J'ai trouvé les informations sous "Fonctionnement du contrôle de compte d'utilisateur" - "Détection de l'installateur" à l'adresse:

http://msdn.microsoft.com/en-us/library/aa905330.aspx

Qui dit ce qui suit:

La détection des installateurs ne concerne que:

  • Exécutables 32 bits
  • Applications sans requiredExecutionLevel
  • Processus interactifs exécutés en tant qu'utilisateur standard avec le contrôle de compte d'utilisateur activé

Avant la création d'un processus 32 bits, les attributs suivants sont vérifiés pour déterminer s'il s'agit d'un programme d'installation:

  • Le nom de fichier inclut des mots clés tels que "installer", "installer" et "mettre à jour".
  • Mots-clés dans les champs de ressources de contrôle de version suivants: fournisseur, nom de société, nom de produit, description de fichier, nom de fichier d'origine, nom interne et nom d'exportation.
  • Mots-clés dans le manifeste d'application côte à côte incorporé dans l'exécutable.
  • Mots-clés dans des entrées StringTable spécifiques liées dans l'exécutable.
  • Attributs de clé dans les données du fichier de ressources liées dans l'exécutable.
  • Séquences d'octets ciblées dans l'exécutable.

  • Remarque: les mots-clés et les séquences d'octets ont été dérivés de caractéristiques communes observées à partir de différentes technologies d'installation.


7

Si vous avez Visual Studio, vous pouvez effectuer les opérations suivantes:

  1. Ouvrez Visual Studio en tant qu'administrateur.
  2. Appuyez sur Ctrl-O pour ouvrir un fichier.
  3. Accédez au dossier contenant Crimson Editor et ouvrez cedt.exe.
  4. Le fichier est ouvert à l'aide de l'éditeur de ressources et vous verrez apparaître une arborescence avec une branche nommée RT_MANIFEST, développez-la et double-cliquez sur l'entrée unique nommée "1 [English United States]".
  5. A peu près aux trois quarts de la colonne de droite, on trouvera légalement ParamètresExpoundLevel = = niveau le plus élevé disponible, remplacez "niveau le plus élevé" par "asInvoker" (notez que l'éditeur s'ouvre par défaut en mode de surimpression.
  6. Enregistrez le fichier et vous avez terminé.

HTH

Kevan


4

Vous trouverez des informations sur les heuristiques ici: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Un manifeste peut aider à contrôler certaines de ces choses.


MSDN parle de "l'intégration" du manifeste. N'est-ce pas fait lors de la compilation du programme? Dois-je compiler moi-même Crimson Editor pour pouvoir y insérer un tel manifeste?
SealedSun

5
Vous pouvez ajouter un fichier filename.exe.manifest dans le même dossier. Windows le lira correctement.
Factor Mystic
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.