是否可以使用 Visual Studio 6.0(VC98 编译器)构建使用清单指定依赖关系的应用程序?

Posted

技术标签:

【中文标题】是否可以使用 Visual Studio 6.0(VC98 编译器)构建使用清单指定依赖关系的应用程序?【英文标题】:Is it possible to build applications that specify dependencies using manifests using Visual Studio 6.0 (VC98 compiler)? 【发布时间】:2016-02-09 03:43:01 【问题描述】:

我正在尝试在命令行(不是 IDE)上移植当前使用 VC98 编译器构建的 win32 应用程序。

我希望为此应用程序启用视觉样式,以便应用程序获得 Windows XP 附带的新主题控件。

为此我学到的方法是使用清单并指定 ComCtl32.dll 的版本 6。

是否可以在我的应用程序中执行此操作而不升级编译器?

也就是说,我们可以使用 Visual Studio 6.0(命令行构建界面)来为应用程序指定清单文件吗?

【问题讨论】:

不确定是否可以通过命令行选项执行此操作,但您可能可以将清单嵌入资源文件中,如 MSDN 上的 both pages 中所述,用于启用视觉样式。 @andlabs 可以从命令行完成 【参考方案1】:

清单只是一种资源。编译资源并将其链接到您的可执行文件,就像任何其他资源一样。

确实,您不需要借助命令行来执行此操作。您可以从 IDE 链接对话框资源、图标资源等。您可以对清单资源执行相同操作。

这里描述了嵌入资源的各种选项: How to embed a manifest in an assembly: let me count the ways...

【讨论】:

这是我阅读问题后的第一个想法。我唯一担心的是旧的 VC6 工具链缺乏对嵌入清单的支持。例如,rc.exe 的版本甚至不知道清单是什么。您可能可以将清单嵌入为二进制 blob,但这并不像博客文章描述的那么简单。或者,您可以使用支持清单的较新版本的 mt.exe,并将其作为构建后事件运行。 @Cody 这只是一个文本文件。所有版本的rc都可以编译。【参考方案2】:

以下在 VS6 上对我有用:

只需将其放入您的 .rc 文件中:

1                       RT_MANIFEST             "manifest.xml"

或者如果RT_MANIFEST没有定义:

1                       24             "manifest.xml"

manifest.xml 是清单文件,在我的例子中是这样的:

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

  <description>Some description</description>

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>

  <dependency> 
    <dependentAssembly> 
      <assemblyIdentity 
        type="win32" 
        name="Microsoft.Windows.Common-Controls" 
        version="6.0.0.0" 
        processorArchitecture="X86" 
        publicKeyToken="6595b64144ccf1df" 
        language="*" 
      /> 
    </dependentAssembly> 
  </dependency> 

</assembly>

comctrl32 6.0 的重要部分是&lt;dependency&gt; 部分。 &lt;trustinfo&gt; 现在也或多或少需要。

【讨论】:

以上是关于是否可以使用 Visual Studio 6.0(VC98 编译器)构建使用清单指定依赖关系的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

从 Visual Studio C++ 6.0 到 VS 2008?

visual c++ 6.0编译时总有一个错误是怎么回事?

visual studio 6.0怎么安装

Visual c++ 6.0 应用程序大小大于 Visual Studio 2010 应用程序大小

在 Visual Studio C++ 6.0 中使用模板函数

C# 6.0 功能不适用于 Visual Studio 2015