我正在ubuntu下用i586-mingw32msvc交叉编译一个应用程序。
我很难理解如何嵌入清单文件以使用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我打开了一个用NSIS创建的Setup.exe
文件,唯一合理的区别是写了Manifest
MANIFEST
中的hello.exe
和Manifest
中的Setup.exe
,hello.rc
中的Manifest
。 O_O
EDIT2:我已经使用Resource Hacker手动更改了hello.exe
组:
现在i586-mingw32msvc-windres
通常会触发UAC警报并以管理员身份运行。似乎是{{1}}的“错误”。 : - )
答案 0 :(得分:2)
关于神奇伏都教数字1和24:
1 24 "hello.exe.manifest"
这一行转化为这样的事情:
ID_MANIFEST RT_MANIFEST "hello.exe.manifest"
其中定义如下定义:
#define ID_MANIFEST 1
#ifndef RT_MANIFEST
#define RT_MANIFEST MAKEINTRESOURCE(24)
#endif
如上所示,条件包装器可能已经定义了 RT_MANIFEST ,如果你在Google上搜索 RT_MANIFEST 术语,你会发现很多点击量更多有关正在发生的事情的详细信息。
答案 1 :(得分:1)
有了一些强烈的伏都教,我在hello.rc
文件中使用了它:
1 24 "hello.exe.manifest"
甚至无法搜索以了解24的用途(资源类型清单?!)..: - )