2015-10-07 2 views
8

Ich bin Cross-Compiling eine Anwendung mit i586-mingw32msvc unter Ubuntu.Manifest-Datei einbinden, um Administrator-Ausführungslevel mit Mingw32 zu benötigen

Ich habe Schwierigkeiten zu verstehen, wie man eine Manifest-Datei einbettet, um Administrator-Ausführungslevel mit mingw32 zu erfordern.

Für mein Beispiel habe ich diese hello.c:

int main() { 
    return 0; 
} 

diese Ressourcendatei hello.rc:

1 Manifest "hello.exe.manifest" 

diese Manifest-Datei 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> 

ich mit meiner Ressource-Datei zu kompilieren:

i586-mingw32msvc-windres hello.rc hello.o 

ich kompilieren meine Endanwendung mit:

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

SigCheck zeigt nicht die Manifest-Datei ausgeführt wird sigcheck -m hello.exe.

Jetzt, wenn ich meine Anwendung unter Windows laufen lassen, löst es nicht die UAC (= nicht als Administrator), während, wenn ich die hello.exe.manifest Datei in den gleichen Ordner anhängen löst es die UAC (wie erwartet).

Was habe ich vermisst?

EDIT1: Spielen mit Resource Hacker ich eine Setup.exe Datei geöffnet habe ich mit NSIS erstellt haben, die einzige vernünftige Unterschied ist, dass ManifestMANIFEST in meinem hello.exe und Manifest in Setup.exe in hello.rc obwohl es Manifest geschrieben geschrieben. O_o

NSIS Installer vs hello.exe

EDIT2:

Modified with Resource Hacker

nun als Administrator hello.exe fungiert normalerweise Auslösen der UAC Alarm und ausgeführt wird: Ich habe die Manifest Gruppe manuell mit Resource Hacker verändert. Scheint wie ein "Bug" mit i586-mingw32msvc-windres. :-)

+0

Dies kann helfen: http://www.transmissionzero.co.uk/computing/win32-apps-with-mingw/ –

+0

@ JonathonReinhart Vielen Dank, aber ich habe versucht, was auf diesem Link auch beschrieben wird .. und [die verlinke es mit] (https://msdn.microsoft.com/en-us/library/bb756973.aspx) auch .. Aber nichts hat sich geändert .. Ich habe meine 'hello.rc' Datei auf' 1 Manifest "aktualisiert hallo.exe.manifest "' .. Mit Resource Hacker habe ich ein NSIS-Installationsprogramm geöffnet (ich habe mit makensis kompiliert), das Administrator erfordert, alles ist vernünftig das gleiche; Das einzige, was anders ist, ist, dass das Manifestfeld "Manifest" in der 'Setup.exe' Datei geschrieben und" MANIFEST "in meine' hello.exe' Datei geschrieben wurde! ([Siehe hier] (http://i.imgur.com/WzHtXnw.png)) –

+0

Normalerweise kompilieren Sie .rc-Datei in '.res' Datei (nicht' .o') –

Antwort

1

Mit einigen intensiven Voodoo bekam ich es mit diesem auf meiner hello.rc Datei zu arbeiten:

1 24 "hello.exe.manifest" 

nicht einmal zu wissen, suchen, was die 24 ist für (Ressourcentyp manifestiert ?!). .:-)

1

Hinsichtlich der magischen Voodoo-Nummern 1 und 24:

1 24 "hello.exe.manifest" 

Diese Linie übersetzt ungefähr wie folgt aus:

ID_MANIFEST RT_MANIFEST "hello.exe.manifest" 

wo diese definiert wie folgt definiert sind:

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

Wie oben durch die bedingten Wrapper gezeigt, ist die RT_MANI FEST möglicherweise bereits definiert und wenn Sie eine Google-Suche nach diesem RT_MANIFEST Begriff finden Sie viele Treffer mit mehr Details zu dem, was vor sich geht.

Verwandte Themen