10
votes

Runasadmin dans le registre ne semble pas fonctionner dans Windows 7

pendant un moment maintenant, le programme d'installation de mon programme a utilisé le code ci-dessous pour faire fonctionner mon application avec des privilèges administratifs. Mais il semble avoir aucun effet sous Windows 7. À Vista, cela fonctionnait magnifiquement. Si je cliquez avec le bouton droit de la souris sur le raccourci et indiquez-lui de fonctionner en tant qu'administration, le programme va bien commencer. Mais en utilisant ci-dessous, le code doit être effectué pour exécuter le programme de la manière tout le temps. Ça ne fait plus. Est-ce que quelqu'un sait si Win 7 utilise toujours cette clé? UAC est également sur le chemin. XXX

Merci.


0 commentaires

5 Réponses :


6
votes

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 votre installateur.

Ma recommandation est que vous distribuez un fichier manifeste avec votre application (app.exe). Le fichier manifeste peut être même intégré dans l'exécutable si vous utilisez Visual Studio 2008. Ensuite, dans le fichier manifeste, vous pouvez avoir besoin de droits d'administrateur.

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

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

http://channel9.msdn.com/posts/jmazner/how-to-tell-vistas-uac-what-prodifier-level-velour-app-requires/


2 commentaires

Merci lextm. Je ne savais pas qu'un fichier manifeste pourrait être fait pour les fichiers EXE que je n'ai pas créé. Ou qu'ils ne devaient pas être intégrés non plus. Merci pour les liens.


@Jimdel: Tous ces liens semblent se rapporter à l'intégration du manifeste. Où avez-vous vu comment je le ferais "pour les fichiers exe que je n'ai pas créés?"



1
votes

dans Win7, runasadmin est placé dans la touche: Lorsque HKLM \\ Software \\ Microsoft \\ Windows NT \\ CurrentVersion \\ AppCompCatFlags \\ Calques Utilisation de l'installation Bouclier 5.1, les valeurs sont copiées sur le appcpmctflgsin wow6432node et < Code> EXE Actualy Falis fonctionne comme administrateur.


0 commentaires

1
votes

Cette réponse de Roben travaille "pour un fichier EXE que je n'ai pas créé," que vous avez exprimé comme un intérêt Dans votre commentaire sur La réponse de Lex Li . Il utilise votre idée de registre d'origine.

Deux différences éventuellement pertinentes:

  1. avec un système d'exploitation 32 bits, je n'ai pas besoin de ne pas vous inquiéter de wow6432node ( une préoccupation mentionnée par " USS ")
  2. en utilisant hklm au lieu de hkcu , je n'ai pas besoin de ne pas vous inquiéter de quel utilisateur exécute l'application ( Une préoccupation mentionnée par Léo ).

0 commentaires

11
votes

J'ai une réponse / solution de contournement pour cette question.

Tout d'abord, je suis en désaccord (respectueusement) avec le commentaire selon lequel l'utilisation de l'appelcCompatFlags n'est pas un «moyen approprié de configurer votre application et votre installateur». La modification de cette section du registre se reflète simplement à l'aide de l'interface graphique Windows pour modifier le niveau de privilège de l'exécutable. Je trouve que cette méthode est plus facile à mettre en œuvre que d'ajouter un fichier manifeste. Si l'utilisateur souhaite ou doit modifier le niveau de privilège pour ne pas exécuter en tant qu'administrateur, ils peuvent le faire facilement avec l'interface graphique.

Quoi qu'il en soit, j'ai eu le même problème d'essayer de définir le niveau de privilège de l'exécutable pour exécuter en tant qu'administrateur. Nous savons que nous pouvons la définir avec l'interface graphique:

  • Cliquez avec le bouton droit de la souris sur le fichier de raccourci ou .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, modifiez les paramètres de tous les utilisateurs
  • Une nouvelle fenêtre de propriétés est ouverte avec une onglet intitulée "Compatibilité pour tous les utilisateurs"
  • sous le niveau de privilège Vérifiez sur "Exécuter ce programme en tant qu'administrateur", cliquez sur OK plusieurs fois pour enregistrer les modifications.

    Lorsque les modifications sont enregistrées, vous trouverez le paramètre dans le registre: xxx

    lorsque je définit le .exe . Pour exécuter en tant qu'administrator en utilisant 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 tout simplement pas en tant qu'administrateur. Le registre montre que j'ai effectué le changement et lorsque 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 différentes de faire le . X / Code> Exécuter en tant qu'administrateur en modifiant simplement le registre:

    • édité manuellement le registre avec Regedit
    • a importé les modifications apportées à partir d'un .reg fichier
    • a utilisé l'outil de ligne de commande REG.EXE pour modifier le registre
    • a utilisé l'outil de script wise de défunt maintenant
    • 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 exécuter en tant qu'administrateur, mais le programme ne fonctionne jamais en tant qu'administrateur.

      Le correctif que pour ce problème, je suis tombé sur le point d'aller de l'avant et de changer à la fois la touche HKCU et la touche hklm avec le réglage. xxx

      Si vous modifiez ces deux sections de registre, le .exe sera exécuté en tant qu'administrateur. Plus important encore, si un utilisateur différent se connecte au PC, le programme fonctionnera en tant qu'administrateur. Cela dépit de la modification du registre ne faisant pas partie de la section HKCU pour l'utilisateur ultérieur.

      Je ne sais pas ce qui se passe ici, mais cela fonctionne.


0 commentaires

1
votes

J'ai utilisé cmd pour ajouter cette entrée dans le registre à l'aide de 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 /reg:64


0 commentaires