J'ai une réponse/solution de contournement pour cette question. Tout d'abord, je ne suis pas d'accord (respectueusement) avec le commentaire que l'utilisation de AppCompatFlags n'est pas une "bonne façon de configurer votre application et votre programme d'installation." La modification de cette section du Registre est simplement mise en miroir à l'aide de l'interface graphique de Windows pour modifier le niveau de privilège de l'exécutable. Je trouve cette méthode plus facile à implémenter que d'ajouter un fichier manifeste. Si l'utilisateur souhaite ou doit modifier le niveau de privilège pour ne pas l'exécuter en tant qu'administrateur, il peut le faire facilement avec l'interface graphique.
Quoi qu'il en soit, j'ai eu ce même problème d'essayer de définir le niveau de privilège de l'exécutable à exécuter en tant qu'administrateur. Nous savons que nous pouvons le définir avec l'interface graphique:
- Cliquez avec le bouton droit sur le raccourci ou.fichier EXE et sélectionnez Propriétés
- Cliquez sur l'onglet Compatibilité
- (À ce stade, vous pouvez définir le niveau de privilège pour seulement vous ou pour tous les utilisateurs, je préfère le faire pour tous les utilisateurs)
- Cliquez sur le bouton, le changement paramètres pour tous les utilisateurs
- Une nouvelle fenêtre Propriétés est ouverte avec un onglet intitulé «Compatibilité pour tous les utilisateurs»
- Sous Niveau de privilège cochez «Exécuter ce programme en tant qu'administrateur», cliquez plusieurs fois sur OK pour enregistrer les modifications .
Lorsque les modifications sont enregistrées, vous trouverez le paramètre dans le Registre:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
Quand je mets le .exe
à exécuter en tant qu'administrateur à l'aide de l'interface graphique de cette façon, cela fonctionne toujours.
Cependant, chaque fois que j'ai essayé de changer le registre directement sans passer par l'interface graphique, le programme ne fonctionnera pas en tant qu'administrateur. Le registre montre que j'ai fait la modification et quand je regarde le niveau de privilège pour l'exécutable, exécuter en tant qu'administrateur est vérifié comme sur.
J'ai essayé plusieurs façons de faire fonctionner .exe
en tant qu'administrateur en changeant simplement le Registre:
- manuellement modifié le registre avec regedit
- importé les modifications d'un fichier
.reg
- utilisé la outil de ligne de commande reg.exe pour changer le registre
- Utilisé l'outil maintenant Wise Script
- Utilisé AutoIT Scripting
Toutes ces méthodes ont fait la même chose. Le registre a été modifié et l'interface graphique a montré que ce programme devrait fonctionner en tant qu'administrateur, mais le programme ne fonctionne jamais en tant qu'administrateur.
La solution pour ce problème que j'ai trébuché est d'aller de l'avant et de modifier la fois la clé HKCU
et la clé HKLM
avec le paramètre.
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN"
Si vous changez ces deux sections de registre, le .exe
fonctionnera en tant qu'administrateur. Plus important encore, si un utilisateur différent se connecte au PC, le programme s'exécutera en tant qu'administrateur. Ceci est en dépit du changement de registre n'étant pas fait section HKCU pour l'utilisateur suivant.
Je ne sais pas ce qui se passe ici, mais ça marche.
Merci lextm. Je ne savais pas qu'un fichier manifeste pouvait être créé pour les fichiers exe que je n'ai pas créés. Ou qu'ils n'ont pas à être intégrés non plus. Merci pour les liens. – JimDel
@JimDel: Tous ces liens semblent concerner l'intégration du manifeste. Où avez-vous vu comment je le ferais "pour les fichiers exe que je n'ai pas créés?" – Pete