如何将Assembly Manifest文件添加到使用NetBeans IDE C++ MinGW创建的.exe文件中

Ern*_*dis 7 c++ windows uac netbeans

如何使用MinGW,C++将Assembly Manifest文件添加到使用NetBeans IDE创建的.exe文件中?该文件看起来像(只是一个例子):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="7.0.0.0"
   processorArchitecture="X86"
   name="nbexec.exe"
   type="win32"/>

<description>nbexec Process.</description>
<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="*"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
  </dependentAssembly>
</dependency>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel
        level="asInvoker"
        uiAccess="false"/>
      </requestedPrivileges>
     </security>
</trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)

如何在EXE文件中包含此信息?

问题是在Windows Vista中,文件标有UAC标志,但它是经过数字签名的.并且我被要求确认每次启动时都让它执行..

我在这里找到了这样的解释:"首先,您必须创建一个XML清单,指定Windows公共控件库的版本6必须由Windows加载,并将其作为"RT_MANIFEST"类型的资源嵌入到您的应用程序中(实际上,如果您您可以将清单命名为"[application name] .exe.manifest"并将其包含在与exe相同的目录中,而不是将其作为资源嵌入,但这样做的缺点是它可能会被意外删除或损坏) ".

Ern*_*dis 5

我自己找到了答案,也许对其他人也有用。

行动:

  1. 创建头文件ids.h
#ifndef RESOURCE_H
#define   RESOURCE_H

#ifdef    __cplusplus
extern "C" {
#endif

#define IDI_ICON_128  101

#ifdef    __cplusplus
}
#endif

#endif    /* RESOURCE_H */

#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 /*Defined manifest file*/
#define RT_MANIFEST                       24
Run Code Online (Sandbox Code Playgroud)
  1. 创建资源文件resource.rc并包含ids.h
#include "ids.h" 

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "Some.exe.manifest"

IDI_ICON_128 ICON "SomeIcon.ico"

1 VERSIONINFO
FILEVERSION     1,0,0,0
PRODUCTVERSION  1,0,0,0
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080904E4"
    BEGIN
      VALUE "CompanyName", "Some company"
      VALUE "FileDescription", "Some description"
      VALUE "FileVersion", "1.0"
      VALUE "InternalName", "Some file name"
      VALUE "LegalCopyright", "Some copyright"
      VALUE "OriginalFilename", "Some.exe"
      VALUE "ProductName", "Some product name"
      VALUE "ProductVersion", "1.0"
    END
  END

  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x809, 1252
  END
END
Run Code Online (Sandbox Code Playgroud)

您可以看到“Some.exe.manifest”程序集清单文件名 该文件(XML 文件,正如您在上面的问题中看到的)应该位于项目类路径中。

现在这是resource.rc属性:

在此输入图像描述

  1. 在项目属性 -链接器选项中:

在此输入图像描述

您可以看到“其他依赖项” -resource.o

这就是全部 - .exe 文件在编译后包含程序集清单文件(还有图标和描述)。

项目视图:

在此输入图像描述

项目文件查看:

在此输入图像描述