2010-06-04 1 views
1

Mon programme d'installation déploie une configuration exe qui est utilisée pour effectuer une configuration de base sur un service Windows également installé. L'exe doit également créer et écrire des clés de registre. Dans un environnement Windows Server 2008, ces clés ne peuvent pas être créées. J'ai enquêté et trouvé que c'est un privilège d'administrateur, et l'exe ne demande pas les autorisations d'administration qui sont nécessaires sous UAC sur 2008. Je peux contourner ce problème en cliquant droit sur l'exe et en cours d'exécution en tant qu'administrateur. Ce n'est pas idéal cependant car c'est une étape supplémentaire que je dois signaler à nos clients. Existe-t-il d'autres façons d'élever les autorisations d'administrateur lors de l'exécution de l'exe?UAC sur Win Server 2008 me causant un mal de tête!

Répondre

1

Mettez un manifeste sur ou avec l'exe. Je peux vous dire comment intégrer le manifeste en utilisant Visual Studio si vous me faites savoir quelle version de ce que vous utilisez. Si vous n'utilisez pas Visual Studio ou si vous ne créez pas l'exe, vous pouvez simplement placer le fichier manifeste dans le même dossier que l'exe et cela fonctionnera également. Dans ce cas, le fichier doit être nommé comme votre exe, avec .manifest à la fin, par exemple pour foo.exe c'est foo.exe.manifest. Le contenu devrait ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace the 
      requestedExecutionLevel node with one of the following. 

     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 

Notez les valeurs possibles pour requestedExecutionLevel sont tous ici dans un commentaire, et celui-ci utilise requireAdministrator. Maintenant, il va toujours s'élever et donc travailler pour vous.

+0

Merci Kate. J'ai essayé cela mais je reçois toujours le même problème en ce moment. Pourriez-vous, comme suggéré, me dire comment intégrer le manifeste dans l'exe, j'utilise visual studio 2008. (Il ne reprend pas les paramètres dans mon fichier manifeste externe par son apparence.J'ai rebaptisé le nom de assemblyIdentity et la propriété de version de manière appropriée aussi fyi) – user48408

+0

Un exe n'est pas appelé foo.config. Soit vous ne montrez pas d'extensions, donc c'est vraiment foo.config.exe, ou l'exe lit le fichier de configuration et vous devez trouver le nom de l'exe. Dans Visual Studio 2008, pour C#: ajoutez un manifeste d'application au projet. Modifiez-le pour que vous demandiez requireAdministrator (vous pouvez copier à partir du commentaire). Cliquez ensuite avec le bouton droit sur le projet et choisissez Properties. Dans l'onglet Application, faites défiler le manifeste et choisissez app.manifest. Construire. Pour VB, accédez simplement à l'onglet Application des propriétés de votre projet, cliquez sur Paramètres UAC, modifiez le manifeste et générez. –

+0

Et dans cet élément: ' ' Peu importe ce que vous avez mis pour nom. Je le change habituellement mais il semble n'y avoir aucun effet sur UAC. –

Questions connexes