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 le drapeau "Exécuter en tant qu’administrateur" dans l’onglet de compatibilité 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?
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 de l'application, qui est incorporé au moment de la compilation, 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 avec privilèges (ce qui est facile à faire) au lieu de l'exiger.
Pour toutes les applications avec requestedPrivilegeLevel="highestLevel"
dans leur manifeste (utilisez Vue du manifeste pour afficher les manifestes d'application), vous pouvez utiliser le Application Compatibility Toolkit de Microsoft pour caler l'application avec le correctif RunAsInvoker, ce qui force l'application à exécuter avec vos jetons d'utilisateur standard.
Pour plus d'informations sur l'utilisation d'Application Compatibility Toolkit, voir cet article à propos de son application à Crimson Editor, ou instructions générales .
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 "mise à jour" 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 de l'application côte à côte intégré à 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.
Si vous avez Visual Studio, vous pouvez effectuer les opérations suivantes:
HTH
Kevan
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.