pr.nizar pr.nizar - 6 months ago 40
Linux Question

Embed manifest file to require administrator execution level with mingw32

I'm cross compiling an application with i586-mingw32msvc under ubuntu.

I'm having difficulties understanding how to embed a manifest file to require administrator execution level with mingw32.

For my example I used this

hello.c
:

int main() {
return 0;
}


this resource file
hello.rc
:

1 Manifest "hello.exe.manifest"


this manifest file
hello.exe.manifest
:

<?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" processorArchitecture="X86" name="hello" type="win32"/>
<description>Hello World</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>


I compile my resource file with:

i586-mingw32msvc-windres hello.rc hello.o


I compile my final application with:

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


SigCheck does not show the manifest file running
sigcheck -m hello.exe
.

Now when I run my application under Windows it does not trigger the UAC (=does not run as administrator) while when I attach the
hello.exe.manifest
file in the same folder it does trigger the UAC (as expected).

What did I miss?

EDIT1: Playing with Resource Hacker I've opened a
Setup.exe
file I've created with NSIS, the only sensible difference is that
Manifest
is written
MANIFEST
in my
hello.exe
and
Manifest
in
Setup.exe
though in
hello.rc
it's written Manifest. O_o

NSIS Installer vs hello.exe

EDIT2: I've changed the
Manifest
group manually with Resource Hacker:

Modified with Resource Hacker

Now
hello.exe
is acting normally triggering the UAC alert and running as an administrator. Seems like a "bug" with
i586-mingw32msvc-windres
. :-)

Answer

With some intense voodoo I got it to work with this on my hello.rc file:

1 24 "hello.exe.manifest"

Won't even search to know what the 24 is for (resource type manifest?!).. :-)