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
EDIT2: Tôi đã thay đổi nhóm Manifest
bằng tay với 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
. :-)
Điều này có thể giúp: http://www.transmissionzero.co.uk/computing/win32-apps-with-mingw/ –
@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)) –
Thông thường bạn biên dịch tệp .rc thành tệp '.res' (không phải' .o') –