Généralement, les ressources contiennent un manifeste et une partie du manifeste indique si le programme a besoin d'un accès administrateur. Comme il s'agit d'un utilitaire d'installation, il a probablement un manifeste nécessitant un accès administrateur et vos tests l'ont détecté lorsqu'il a tenté de partager le fichier de ressources.
(D'autres personnes parlent de l'heuristique utilisée pour deviner si un programme a besoin d'un accès administrateur quand il n'a pas de manifeste.Par exemple, si vous avez un ancien programme qui a été créé avant que les fichiers manifestes soient communs, le système d'exploitation peut-être essayer de deviner si c'est un installateur en cherchant certaines expressions comme "setup" dans le nom du fichier, je crois qu'il y a d'autres heuristiques aussi, c'est un hack pour les anciens programmes qui ont été écrits avant les manifestes. besoin d'un accès administrateur.)
Vous pouvez résoudre votre problème en fournissant votre propre manifeste. La méthode la plus simple consiste à utiliser l'option de l'éditeur de liens /MANIFESTUAC
.
Si vous utilisez une chaîne d'outils plus ancienne, vous devrez probablement créer le fichier manifeste et l'inclure dans vos ressources.
Le manifeste est un fragment de code XML. Le bit important pour vous ressemblerait à quelque chose comme ceci:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="yourprogram.exe" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Pour incorporer dans vos ressources, votre fichier .rc devrait avoir:
1 RT_MANIFEST <filename>
Si votre SDK est si vieux que RT_MANIFEST
n'est pas défini , vous pouvez le définir vous-même:
#define RT_MANIFEST 24
Petite raison pour ne pas nous dire ce que le fichier .rc contient. Mais oui, le fait qu'il contienne un manifeste qui utilise 'requireAdminstrator' est la manière normale de demander l'élévation de l'UAC. –
en ce qui concerne la réponse, c'est la mauvaise partie: VALUE "FileDescription", "Module d'installation" VALUE "InternalName", "SETUP" Configuration VALUE "OriginalFilename", "SETUP.EXE" VALEUR "ProductName", » Module " rien de tel que manifeste défini ici :) – TheTrowser