2015-10-07 4 views
8

Я перекрестно компилирую приложение с i586-mingw32msvc под ubuntu.Вставить файл манифеста, требующий уровня выполнения администратора с помощью mingw32

У меня возникли трудности с пониманием того, как внедрить файл манифеста, требующий уровня выполнения администратора с помощью mingw32.

В моем примере я использовал этот hello.c:

int main() { 
    return 0; 
} 

этот файл ресурса hello.rc:

1 Manifest "hello.exe.manifest" 

этот файл манифеста 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> 

компилировать мой файл ресурсов с:

i586-mingw32msvc-windres hello.rc hello.o 

Я компилирую мое окончательное заявление с:

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

SigCheck не показывает файл манифеста работает sigcheck -m hello.exe.

Теперь, когда я запускаю свое приложение под Windows, он не запускает UAC (= не запускается как администратор), а когда я присоединяю файл hello.exe.manifest в той же папке, он вызывает UAC (как и ожидалось).

Что я пропустил?

EDIT1: Играя с Resource Hacker Я открыл Setup.exe файл, который я создал с NSIS, единственная разумная разница в том, что Manifest написано MANIFEST в моем hello.exe и Manifest в Setup.exe хотя в hello.rc написано манифест. O_o

NSIS Installer vs hello.exe

EDIT2: Я изменил Manifest группу вручную Hacker Resource:

Modified with Resource Hacker

Теперь hello.exe действует обычно вызывая предупреждение UAC и работает в качестве администратора. Кажется, «ошибка» с i586-mingw32msvc-windres. :-)

+0

Это может помочь: http://www.transmissionzero.co.uk/computing/win32-apps-with-mingw/ –

+0

@JonathonReinhart Спасибо, но я пробовал то, что описано в этой ссылке тоже .. и [ связать его с] (https://msdn.microsoft.com/en-us/library/bb756973.aspx) тоже .. Но ничего не изменилось .. Я обновил свой файл 'hello.rc' до' 1 Manifest ' hello.exe.manifest ". .. С Resource Hacker Я открыл установщик NSIS (я скомпилировал с makensis), который требует администратора, все разумно одинаково; единственное, что отличается, - это поле манифеста, написанное «Манифест» в файле «Setup.exe» и написанное «MANIFEST» в моем файле 'hello.exe'! ([См. Здесь] (http://i.imgur.com/WzHtXnw.png)) –

+0

Обычно вы компилируете файл .rc в файл '.res' (а не' .o') –

ответ

1

С некоторым интенсивным вуду я получил его на работу с этим на моем hello.rc файле:

1 24 "hello.exe.manifest" 

не будет даже искать, чтобы знать, что 24 для (типа ресурса манифеста ?!). ,:-)

1

Что касается магических чисел вуду 1 и 24:

1 24 "hello.exe.manifest" 

Эта линия переводится Somthing так:

ID_MANIFEST RT_MANIFEST "hello.exe.manifest" 

где эти определяет такие, как определено следующим образом:

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

Как показано выше условными обертками, RT_MANI FEST может быть уже определен, и если вы выполните поиск Google для этого RT_MANIFEST, вы найдете множество обращений с более подробной информацией о том, что происходит.