2015-10-07 16 views
8

Tôi đang biên soạn một ứng dụng với i586-mingw32msvc trong ubuntu.Nhúng tệp kê khai để yêu cầu cấp thực thi của quản trị viên với mingw32

Tôi đang gặp khó khăn trong việc hiểu cách nhúng tệp kê khai để yêu cầu cấp thực thi của quản trị viên với mingw32.

Ví dụ tôi sử dụng này hello.c:

int main() { 
    return 0; 
} 

tập tin này nguồn hello.rc:

1 Manifest "hello.exe.manifest" 

file manifest này 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> 

tôi biên dịch tập tin nguồn của tôi với:

i586-mingw32msvc-windres hello.rc hello.o 

tôi biên dịch ứng dụng cuối cùng của tôi với:

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

SigCheck không hiển thị các file manifest chạy sigcheck -m hello.exe.

Bây giờ khi tôi chạy ứng dụng của mình dưới Windows, nó không kích hoạt UAC (= không chạy với tư cách quản trị viên) trong khi tôi đính kèm tệp hello.exe.manifest trong cùng một thư mục kích hoạt UAC (như mong đợi).

Tôi đã bỏ lỡ điều gì?

EDIT1: Chơi với Resource Hacker tôi đã mở một file Setup.exe tôi đã tạo với NSIS, sự khác biệt duy nhất là hợp lý Manifest được viết MANIFEST trong hello.exe tôi và Manifest trong Setup.exe mặc dù trong hello.rc nó được viết Manifest. O_o

NSIS Installer vs hello.exe

EDIT2: Tôi đã thay đổi nhóm Manifest bằng tay với Resource Hacker:

Modified with Resource Hacker

Bây giờ hello.exe là hành động bình thường gây ra cảnh báo UAC và chạy như một quản trị viên. Có vẻ như "lỗi" với i586-mingw32msvc-windres. :-)

+0

Điều này có thể giúp: http://www.transmissionzero.co.uk/computing/win32-apps-with-mingw/ –

+0

@JonathonReinhart Cảm ơn bạn nhưng tôi đã thử những gì được mô tả trên liên kết đó quá .. và [ liên kết nó liên kết đến] (https://msdn.microsoft.com/en-us/library/bb756973.aspx) quá .. Nhưng không có gì thay đổi .. Tôi đã cập nhật tệp 'hello.rc' thành' 1 Manifest " hello.exe.manifest "' .. Với Resource Hacker tôi đã mở một trình cài đặt NSIS (tôi đã biên dịch với makensis) yêu cầu quản trị viên, mọi thứ đều hợp lý như nhau; điều duy nhất khác biệt là trường biểu hiện được viết "Tệp kê khai" trong tệp 'Setup.exe' và được viết" MANIFEST "trong tệp' hello.exe' của tôi! ([Xem tại đây] (http://i.imgur.com/WzHtXnw.png)) –

+0

Thông thường bạn biên dịch tệp .rc thành tệp '.res' (không phải' .o') –

Trả lời

1

Với một số voodoo dữ dội tôi đã nhận nó để làm việc với điều này trong hồ sơ hello.rc tôi:

1 24 "hello.exe.manifest" 

sẽ thậm chí không tìm kiếm để biết những gì mà 24 là cho (loại tài nguyên manifest ?!). .:-)

1

liên quan đến những con số ma thuật voodoo 1 và 24 Với:

1 24 "hello.exe.manifest" 

dòng Đó dịch để somthing như thế này:

ID_MANIFEST RT_MANIFEST "hello.exe.manifest" 

nơi những định nghĩa được quy định như sau:

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

Như được trình bày ở trên bởi trình bao bọc có điều kiện, RT_MANI FEST có thể đã được xác định và nếu bạn thực hiện tìm kiếm trên Google cho cụm từ đó RT_MANIFEST, bạn sẽ tìm thấy nhiều lần truy cập với nhiều chi tiết hơn về những gì đang diễn ra.

Các vấn đề liên quan