RUNASADMIN dans le Registre ne semble pas fonctionner sous Windows 7

depuis un moment, l'installateur de mon programme utilise le code ci-dessous pour faire tourner mon application avec les privilèges d'administration. Mais il semble n'avoir aucun effet sous Windows 7. À Vista, ça a très bien marché. Si je clic droit sur le raccourci et dire qu'il fonctionne comme Administrer, le programme va commencer à bien. Mais en utilisant le code ci-dessous, il devrait être fait pour exécuter le programme de cette façon tout le temps. Il n'est pas plus. Personne ne sait si Win 7 utilise toujours cette clé? UAC est également en façon.

Registry.SetValue(@"HKEY_CURRENT_USERSoftwareMicrosoftWindows NT
CurrentVersionAppCompatFlagsLayers", "C:Appapp.exe", "RUNASADMIN");

Merci.

10
demandé sur Wolf 2009-11-13 02:10:14

5 réponses

J'utilise Windows 7 et je peux voir de telles clés. Cependant, je ne pense pas que ce soit une bonne façon de configurer votre application et de l'installer.

Ma recommandation est que vous distribuer un fichier de manifeste avec votre application (app.EXE.) Le fichier manifest peut même être intégré facilement dans l'exécutable si vous utilisez Visual Studio 2008. Alors dans le fichier de manifeste vous pouvez avoir besoin de l'administrateur droit.

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

http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx

http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App-Requires/

6
répondu Lex Li 2009-11-13 00:58:47

j'ai une réponse / solution pour cette question.

tout d'abord, je ne suis pas d'accord (respectueusement) avec le commentaire que l'utilisation des AppCompatFlags n'est pas une "manière correcte de configurer votre application et votre installateur."Modifier cette section du registre est simplement un miroir en utilisant L'interface graphique de Windows pour changer le niveau de privilège de l'exécutable. Je trouve cette méthode plus facile à implémenter que d'ajouter un fichier manifest. Si l'utilisateur veut ou a besoin de changer le niveau de privilège pour ne pas exécuter en tant que Administrateur, ils peuvent le faire facilement avec l'interface graphique.

de toute façon, 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 régler avec l'interface graphique:

  • clic-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 vous ou pour tous les utilisateurs; je préfère le faire pour tous les utilisateurs)
  • Cliquez sur le bouton Modifier les 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 le niveau de privilège, cochez la case "Exécuter ce programme en tant qu'Administrateur", cliquez sur OK quelques fois 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 en utilisant L'interface graphique de cette façon, il fonctionne toujours.

Cependant, chaque fois que j'ai essayé de changer le Registre directement sans passer par L'interface graphique, le programme ne s'exécute tout simplement pas en tant qu'administrateur. Le registre montre que j'ai fait le changement et quand je regarde le niveau de privilège pour l'exécutable, L'exécution en tant qu'administrateur est cochée comme on.

j'ai essayé plusieurs façons différentes de faire le .exe exécuter en tant qu'administrateur en changeant juste le registre:

  • édité manuellement le registre avec regedit!--16-->
  • Importé les modifications à partir d'un .reg le fichier
  • utilisé l'outil en ligne de commande reg.exe pour modifier le registre
  • utilisé l'outil de Script Wise maintenant disparu
  • Utilisé Le Script Automatique

Toutes ces méthodes ont la même chose. Le registre a été modifié et L'interface graphique a montré que le programme devait être exécuté en tant qu'administrateur, mais le programme ne fonctionne jamais en tant qu'administrateur.

Le correctif pour ce problème que je suis tombé sur est d'aller de l'avant et de changer les deux HKCU et HKLM clé avec le réglage.

[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 les deux sections de registre, alors le .exe s'exécutera comme administrateur. Plus important encore, si un autre utilisateur se connecte au PC, le programme va exécuter en tant qu'administrateur. Ceci est en dépit du fait que le changement de registre n'a pas été fait section HKCU pour l'utilisateur suivant.

je ne sais pas ce qui se passe ici, mais il est travailler.

8
répondu Doug Green 2015-01-23 23:20:43

dans win7 , RUNASADMIN EST PLACÉ DANS LA CLÉ : lorsque HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers utilisant l'écran d'installation 5.1 , les valeurs sont copiées à l' appcpmctflgsin wow6432node et exe actuellement falis à exécuter en tant qu'administrateur.

1
répondu uss 2012-10-21 01:38:17

Cette réponse par RobeN fonctionne "pour un fichier exe que je n'ai pas créé", ce que vous avez exprimé comme un intérêt dans votre commentaire sur la réponse de Lex Li. Il utilise votre idée originale de registre.

deux différences possiblement significatives:

  1. avec un OS de 32 bits, Je n'ai pas besoin de m'inquiéter de la Wow6432Node (un sujet de préoccupation mentionnés par "uss")
  2. En utilisant HKLM au lieu de HKCU, Je n'ai pas besoin de me soucier de l'utilisateur qui exécute l'application (un sujet de préoccupation mentionnés par Leo).
1
répondu Pete 2017-05-23 12:01:09

J'ai utilisé CMD pour ajouter cette entrée dans le Registre en utilisant la commande suivante:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN

cela fonctionne bien dans Win8Pro-32Bit mais ne fonctionne pas sur la version 64Bit!

J'ai trouvé que l'exécution de cette commande avec un gain de 64 bits (qui passe par un installateur 32 bits comme étape finale de l'installation), provoque la création d'une entrée sur HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers!

Après quelques recherches (merci à Mon Ami M. H. Toosi), nous avons trouvé la bonne solution.

JUSTE AJOUTER /reg:64 À LA FIN DE LA COMMANDE PRÉCÉDENTE comme ceci:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN /reg:64

et tout est normal dans les deux os 32 et 64 bits(Win 7 32Bit, Win 8 32Bit, Win 8.1 64Bit).

1
répondu S.M.Mousavi 2015-11-25 17:29:57