Incorporer le fichier manifeste pour exiger le niveau d’exécution de l’administrateur avec mingw32

Je comstack une application avec i586-mingw32msvc sous Ubuntu.

J’ai de la difficulté à comprendre comment intégrer un fichier manifeste à un niveau d’exécution administrateur avec mingw32.

Pour mon exemple, j’ai utilisé ce hello.c :

 int main() { return 0; } 

ce fichier de ressources hello.rc :

 1 Manifest "hello.exe.manifest" 

ce fichier manifeste hello.exe.manifest :

    Hello World         

Je comstack mon fichier de ressources avec:

 i586-mingw32msvc-windres hello.rc hello.o 

Je comstack ma dernière application avec:

 i586-mingw32msvc-gcc -O3 -Os -s -o hello.exe hello.c hello.o 

SigCheck n’affiche pas le fichier manifeste exécutant sigcheck -m hello.exe .

Maintenant, lorsque je lance mon application sous Windows, il ne déclenche pas l’UAC (= ne s’exécute pas en tant qu’administrateur) alors que lorsque je connecte le fichier hello.exe.manifest dans le même dossier, il déclenche l’UAC (comme prévu).

Qu’est-ce que j’ai raté?

EDIT1: Jouer avec Resource Hacker J’ai ouvert un fichier Setup.exe que j’ai créé avec NSIS, la seule différence sensible est que Manifest est écrit MANIFEST dans mes hello.exe et Manifest dans Setup.exe mais dans hello.rc il est écrit Manifeste. O_o

NSIS Installer vs hello.exe

EDIT2: J’ai changé le groupe de Manifest manuellement avec Resource Hacker:

Modifié avec le pirate de ressources

Maintenant, hello.exe agit normalement en déclenchant l’alerte UAC et s’exécute en tant qu’administrateur. Semble un “bug” avec i586-mingw32msvc-windres . 🙂

En ce qui concerne les numéros 1 et 24 du vaudou magique:

 1 24 "hello.exe.manifest" 

Cette ligne se traduit par quelque chose comme ceci:

 ID_MANIFEST RT_MANIFEST "hello.exe.manifest" 

où ces définitions sont définies comme suit:

 #define ID_MANIFEST 1 #ifndef RT_MANIFEST #define RT_MANIFEST MAKEINTRESOURCE(24) #endif 

Comme indiqué ci-dessus par les wrappers conditionnels, le RT_MANIFEST peut déjà être défini et si vous effectuez une recherche Google pour ce terme RT_MANIFEST , vous trouverez de nombreux hits avec plus de détails sur ce qui se passe.

Avec un voodoo intense, je l’ai fait fonctionner avec mon fichier hello.rc :

 1 24 "hello.exe.manifest" 

Ne cherchera même pas à savoir à quoi sert le 24 (type de ressource manifeste ?!) .. 🙂