web-dev-qa-db-fra.com

Comment définir "Exécuter ce programme en tant qu'administrateur" par programme

J'ai un problème avec le bon vieux bdeadmin.exe de Vista. Commençons par éliminer les réponses prévisibles:

"Vous ne devriez pas exiger que votre demande soit élevée."
Celui-ci fait. C'est la vie.

"Vous devez intégrer un fichier manifeste."
Il est déjà compilé, il a plusieurs années, la société qui l’a créé n’a pas l’intention de le refaire et il est installé à partir d’un module de fusion (fichier MSM).

"BDE est obsolète, vous devriez utiliser dbExpress"
Un million et demi de lignes de code. 'Nuff a dit.

"Déposer un fichier manifeste à côté de l'EXE."
Essayé cela, n'a rien fait. En guise de test, ce même fichier manifeste a pu créer plusieurs autres fichiers EXE nécessitant une élévation, mais pas celui que je voulais. Quelque chose empêche la lecture du manifeste externe.

"Créez un raccourci et définissez SLDF_RUNAS_USER."
Ne peut pas faire ça, c'est un applet du Panneau de configuration.

La seule chose qui a fonctionné a été de définir "Exécuter ce programme en tant qu'administrateur" sous l'onglet Compatibilité de sa fenêtre Propriétés. Je ne devrais pas avoir à dire aux utilisateurs de le faire. Mauvais pour les affaires. J'ai besoin que l'installateur le fasse. Le fichier MSM utilise un chemin statique.

27
Patrick

Vous pouvez définir par programme l'indicateur "Exécuter ce programme en tant qu'administrateur" (l'option que vous trouvez dans l'onglet Compatibilité des propriétés d'un fichier EXE), en définissant une simple clé de registre. Vous devez créer une valeur de chaîne (REG_SZ) sous l'une de ces clés (si vous souhaitez que le paramètre soit par utilisateur ou par machine, respectivement):

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

ou

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

Le nom de la valeur doit être le chemin complet de votre exécutable (si le chemin contient des espaces, n'entourez pas le chemin avec des guillemets) et les données de la valeur doivent contenir la chaîne RUNASADMIN.

Comme échantillon:

reg.exe Add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Program Files\MyApp\Test.exe" /d "PUT__VALUE__HERE"

Modes de compatibilité

WIN95 Windows 95
WIN98 Windows 98
WIN4SP5 Windows NT 4.0 SP5
WIN2000 Windows 2000
WINXPSP2 Windows XP SP2
WINXPSP3 Windows XP SP3
VISTARTM Vista
VISTASP1 Vista SP1
VISTASP2 Vista SP2
WIN7RTM Windows 7
WINSRV03SP1 Windows Server 2003 SP1
WINSRV08SP1 Windows Server 2008 SP1 

Niveau de privilège

RUNASADMIN Exécuter le programme en tant qu'administrateur

REG AJOUTEZ "HKLM\LOGICIEL\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\temp\compatmodel\iconsext.exe"/t REG_SZ/d "WINXPSP3 RUNASADMIN" /F

Références: http://www.verboon.info/2011/03/running-an-application-as-administrator-or-in-compatibility-mode/

36
Allon Guralnek

Il s’agit d’un long projet, mais si vous avez le mot "setup" ou "install" dans le nom du fichier EXE, Windows vous demandera une élévation lorsqu’il sera exécuté. Je ne sais pas si cela fonctionnera avec un applet du panneau de contrôle, cependant.

6
Allon Guralnek

Avez-vous essayé Microsoft Application Compatibility Toolkit ? Il analyse votre application et fournit des solutions de compatibilité susceptibles de vous aider à résoudre votre problème.

1
Aaron Klotz

J'ai constaté que la méthode de fichier .manifest ne fonctionnait pas si .exe était sous C:\Program files\... et si .exe avait déjà été exécuté sans le fichier .manifest. Windows se souvient du .manifest depuis la première exécution du .exe. Cela signifie que vous ne pouvez pas simplement envoyer le manifeste lorsque les utilisateurs se plaignent que leurs installations ne fonctionnent pas. Le fichier manifeste doit être placé avant ou pendant la même installation que celle qui place le .exe

Windows revérifie le .manifest si le .exe change (par exemple, nouvelle version ou nombre d'octets différent). 

1
user2861544

Utilisez un programme qui utilise ShellExecute qui utilise "runas" comme "verbe" pour exécuter le programme souhaité.

1
Barrypp.zzx

Pack votre application dans WinRar SFX avec le mode silencieux + mode de demande admin.

Beaucoup plus simple que de jouer avec les variables .MSI.

0
Benji