2015-10-07 9 views
8

ile yönetici yürütme düzeyini zorunlu kılmak için manifest dosyası gömün ubuntu altında i586-mingw32msvc ile bir uygulama derleme çapraz.mingw32

Mingw32 ile yönetici yürütme düzeyini gerektirecek bir bildirim dosyasının nasıl yerleştirileceğini anlamakta zorluk çekiyorum.

int main() { 
    return 0; 
} 

bu kaynak dosyasını hello.rc:

1 Manifest "hello.exe.manifest" 

bu bildirim dosyası hello.exe.manifest: Ben ile benim kaynak dosyası derlemek

<?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> 

benim Örneğin

bu hello.c kullandı:

çalışan bildirim dosyasını göstermiyor

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

SigCheck:

i586-mingw32msvc-windres hello.rc hello.o 
Ben ile benim son uygulamayı derlemek.

Uygulamamı Windows altında çalıştırdığımda, aynı klasöre hello.exe.manifest dosyasını eklerken UAC (beklendiği gibi) tetiklenirken UAC (= yönetici olarak çalışmaz) tetiklenmez.

Neyi özledim?

Edit1:Resource Hacker ile oynamak ben NSIS ile oluşturulan olduğunuz bir Setup.exe dosyayı açtıktan, tek mantıklı fark hello.rc o Manifest yazıldığı olsa ManifestSetup.exe benim hello.exe ve Manifest içinde MANIFEST yazılı olmasıdır.

NSIS Installer vs hello.exe

EDIT2 O_o: el Kaynak Hacker ile Manifest grubu değiştirdik:

Modified with Resource Hacker

Şimdi hello.exe normal davranıyor UAC uyarı tetikleme ve yönetici olarak çalışıyor. i586-mingw32msvc-windres ile bir "böcek" gibi görünüyor. :-)

+0

Bu yardımcı olabilir: http://www.transmissionzero.co.uk/computing/win32-apps-with-mingw/ –

+0

@JonathonReinhart Teşekkür ederim ama ben de bu bağlantıda anlatılanları denedim. link (link): (https://msdn.microsoft.com/en-us/library/bb756973.aspx) de .. Ama hiçbir şey değişmedi .. 'hello.rc' dosyamı' 1 Manifest 'olarak güncelledim merhaba.exe.manifest "' .. Kaynak Korsancı Ben yönetici gerektiren bir NSIS yükleyici (makensis ile derledim) açtım, her şey mantıklı aynıdır; Farklı olan tek şey açık alan "Setup.exe" dosyasında "Manifest" yazılır ve "hello.exe" dosyasında "MANIFEST" yazılır! ([Buraya bakın] (http://i.imgur.com/WzHtXnw.png) –

+0

Normalde .rc dosyasını '.res' dosyasına (" .o "değil) derlersiniz. –

cevap

1

bazı yoğun voodoo ile benim hello.rc kayıtlı bu çalışmayı got it:

1 24 "hello.exe.manifest" 

hatta 24 (manifesto kaynak türü ?!) için olduğunu bilmek arama olmaz. .:-)

1

sihirli büyü numaralar 1 ve 24 ile ilgili olarak:

1 24 "hello.exe.manifest" 

Bu çizgi böyle somthing çevirir: O tanımlar olarak tanımlanır olarak

ID_MANIFEST RT_MANIFEST "hello.exe.manifest" 

aşağıdaki gibidir:

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

Yukarıdaki koşullu sarmalayıcılar tarafından gösterildiği gibi, RT_MANI FEST zaten tanımlanmış olabilir ve bu RT_MANIFEST terim için bir Google arama yaparsanız neler olup bittiğini daha fazla ayrıntı ile çok sayıda hit bulacaksınız.

İlgili konular