VB6清单不适用于Windows 7

时间:2010-12-20 11:25:53

标签: vb6 windows-7 uac manifest vb6-migration

我为在Windows 7上运行的VB6应用程序创建了一个清单文件(不是用于任何视觉样式更改,只是为了确保它访问公共注册表而不是虚拟化注册表)

exe名称为Capadm40.exe,清单名为Capadm40.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="CompanyName.Capadm40"
     type="win32"/>
  <description>Administers the System</description>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

然而,这似乎没有任何区别。即应用程序仍在使用虚拟化注册表配置单元。同样奇怪的是,在我在应用程序exe的属性中取消“以管理员身份运行此程序”选项之后,Windows仍然在应用程序图标上显示屏蔽,导致我认为这是我的Windows安装的一些问题而不是而不是清单的错误。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

您可能会遇到融合缓存(以及Explorer Shell的图标缓存)。无论如何都强烈建议不要使用外部清单,但是在程序运行之后尝试添加一个通常会导致出现这种症状。

有关简要说明,请参阅Manifest and the fusion cache

您也可以touch EXE重新加载缓存。

答案 1 :(得分:1)

我会利用LaVolpe的清单创建者,适用于XP,Vista和7:http://www.vbforums.com/showthread.php?t=606736

答案 2 :(得分:0)

我只找到一个适用于所有平台9x +的清单。甚至可以工作。我已经尝试了所有的例子,文章等。

版本号或添加到其中的任何其他内容都会将其终止。可能的异常是requestedExecutionLevel上的额外参数,似乎没问题。你可以改变等级,你可以添加uiAccess。那些是允许的。经过大量的二进制计数测试后,我发现微软提供的那些可爱的额外功能表明,windows会出现各种错误。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
        <ms_asmv2:security>
            <ms_asmv2:requestedPrivileges>
                <ms_asmv2:requestedExecutionLevel level="asInvoker">
                </ms_asmv2:requestedExecutionLevel>
            </ms_asmv2:requestedPrivileges>
        </ms_asmv2:security>
    </ms_asmv2:trustInfo>
</assembly>

答案 3 :(得分:-1)

在VB6 IDE中应用样式:

将此文本保存在与vb6.exe相同的文件夹中名为vb6.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="Microsoft.VisualBasic.IDE"
    type="win32"
/>
<description>Visual Basic 6 IDE</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>   

在文件末尾添加空格,直到达到672字节(4的倍数)。

然后:

  1. 下载资源黑客并以管理员身份打开
  2. 文件&gt;打开VB6.exe
  3. 文件&gt;新空白脚本
  4. 类型: 1 24 "vb6.exe.manifest"
  5. 编译脚本
  6. 保存