可以使用资源编辑器将清单资源添加到VB6项目吗?

时间:2010-07-02 15:10:25

标签: vb6 windows-7 uac manifest

我们有一个VB6项目,编译成一个ActiveX EXE,恰好在文件名中有“patch”一词(它是警察调度系统的一部分),这导致Windows 7上的Installer Detection思考它需要提升。

我希望将清单资源嵌入到将请求asInvoker权限级别的已编译EXE中,而不是重命名EXE。从阅读开始,我知道我可以在使用Windows SDK中的mt工具编译EXE后执行此操作,但我更喜欢将清单放在.RES文件中,以便每当我将其编译到程序中建立项目。

有没有办法使用资源编辑器加载项将清单资源(资源类型24)添加到VB6项目?我将清单文件添加为自定义资源,并尝试了一些不同的资源类型值,例如“RT_MANIFEST”和“24”,然后通过使用mt重新提取清单来测试它是否正常工作但我无法让它发挥作用。

注意:正如我访问的几个页面所提到的,我确实记得将清单设为4个字节的偶数倍,所以我认为这不是问题所在。

1 个答案:

答案 0 :(得分:4)

首先,我想我会尝试使用rc创建一个.RES文件,我可以将其添加到我的项目中。我之前从未使用过rc,所以在尝试解决这个问题时,我最终得到了MSDN page

有趣的是该页面上typeNameId的描述(强调添加):

  

的类型名称或标识符   资源。指定字符串名称或   数。 如果使用数字,请在前面添加   带有“#”的字符串表示它   代表一个数字。每个resourceType   element必须只有一个typeNameId   属性。

我心想,“嗯,这很有趣,可能不适用于VB6的资源编辑器,但无论如何我都会尝试。”

请注意,如果您将清单文件添加为自定义资源,然后将其类型更改为#24(即使用#前缀),则可以正常工作!它在编译的EXE中被正确嵌入为清单资源。

以下是详细步骤:

1)创建清单文件。我使用了这个(请注意,在我的情况下,末尾的填充使文件恰好为608字节):

<?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" name="DispatchMonitor" type="win32"/>
    <description>DispatchMonitor RunAsInvoker fix</description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo> 
</assembly> 
<!-- Padding to make filesize even multiple of 4 -->

2)从工具菜单中选择资源编辑器,打开VB6 IDE中的资源编辑器(您可能必须先启用它)在加载项&gt; 加载项管理器)中。

3)如有必要,创建一个新的资源文件。

4)添加新的自定义资源(单击“?”图标左侧的按钮。

5)出现文件选择对话框:选择在步骤1中创建的清单文件。

6)默认情况下,资源将添加到ID为101的“CUSTOM”文件夹下。

7)双击新资源。将“类型”更改为#24,将“Id”更改为1.

8)保存更改并关闭资源编辑器