使用mingw32embedded清单文件以要求pipe理员执行级别

我在ubuntu下用i586-mingw32msvc交叉编译一个应用程序。

我很难理解如何使用mingw32来embedded清单文件以要求pipe理员执行级别。

对于我的例子,我用这个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 -m hello.exe不显示运行sigcheck -m hello.exe的清单文件。

现在当我在Windows下运行我的应用程序时,它不会触发UAC(=不会以pipe理员身份运行),而当我将hello.exe.manifest文件附加到同一文件夹时,它会触发UAC(如预期的那样)。

我错过了什么?

编辑1:玩资源黑客我已经打开了我用NSIS创build的Setup.exe文件,唯一明智的区别是, Manifest是写在我的hello.exe ManifestManifest Setup.exe虽然在hello.rc它被写performance。 O_O

NSIS安装程序与hello.exe

编辑2:我用Resource Hacker手动更改了Manifest组:

用资源黑客修改

现在, hello.exe正在通常触发UAC警报并以pipe理员身份运行。 似乎与i586-mingw32msvc-windres “错误”。 🙂

Solutions Collecting From Web of "使用mingw32embedded清单文件以要求pipe理员执行级别"

随着一些激烈的巫术,我得到了它在我的hello.rc文件上工作:

 1 24 "hello.exe.manifest" 

甚至不会搜索知道什么是24(资源类型清单?!).. 🙂

关于巫术数字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可能已经被定义,如果你做了一个RT_MANIFEST术语的Google搜索,你会发现很多关于更新细节的命中。