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

Mik*_*oss 4 vb6 uac manifest windows-7

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

我不想重命名EXE,而是将清单资源嵌入到将要求asInvoker特权级别的已编译EXE中。通过阅读,我知道可以使用mtWindows SDK中的工具编译EXE之后执行此操作,但是我更愿意将清单放置在.RES文件中,以便在构建项目时将其编译到程序中。

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

注意:正如我访问过的几页所述,我确实记得将清单的大小设为4字节的偶数倍,所以我认为这不是问题。

Mik*_*oss 5

起初,我以为我会尝试rc创建一个.RES可以添加到项目中的文件。我以前从未使用rc过,因此在试图弄清楚时,最终进入了这个MSDN页面

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

输入资源的名称或标识符。指定字符串名称或数字。如果使用数字,则在字符串前加上“#”以表示它代表数字。每个resourceType元素必须仅具有一个typeNameId属性。

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

瞧,如果您将清单文件添加为自定义资源,然后将其类型更改为#24(即使用#前缀),那么它将起作用!它已正确地作为清单资源嵌入在已编译的EXE中。

详细步骤如下:

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

<?xml版本=“ 1.0”编码=“ UTF-8”独立=“是”?> 
<assembly xmlns =“ urn:schemas-microsoft-com:asm.v1” manifestVersion =“ 1.0”>
    <assemblyIdentity version =“ 1.0.0.0” name =“ DispatchMonitor” type =“ win32” />
    <description> DispatchMonitor RunAsInvoker修复</ description>
    <trustInfo xmlns =“ urn:schemas-microsoft-com:asm.v2”>
        <安全性>
            <requestedPrivileges>
                <requestedExecutionLevel level =“ asInvoker” uiAccess =“ false” />
            </ requestedPrivileges>
        </ security>
    </ trustInfo> 
</ assembly> 
<!-填充文件大小甚至是4的倍数->

2)通过从“ 工具”菜单中选择“ 资源编辑器”,在VB6 IDE中打开资源编辑(您可能必须首先在“ 加载项” >“ 加载项管理器”中启用它)。

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

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

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

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

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

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