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
EDIT2: J’ai changé le groupe de Manifest
manuellement avec Resource Hacker:
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 ?!) .. 🙂