我已经为在Windows 7上运行的VB6应用程序创建了一个清单文件(不是用于任何视觉样式更改,只是为了确保它访问通用注册表而不是虚拟化版本)VB6清单在Windows 7上不工作
的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安装的一些问题而不是清单的错误。有任何想法吗?
如果它在exe上有防护罩,当它运行时它肯定会提示提升吗?在那种情况下,它不会得到虚拟化,至少不会是UAC虚拟化。在试图处理您的清单问题之前,您是否真的确信它正在写入虚拟化蜂巢位置? – 2010-12-20 12:27:18
它不是要求提升,它不应该(我认为显示盾牌的图标必须是某种Windows bug),因为它在运行时会使用虚拟注册表,因为数据的路径与我右键单击并运行管理员。问题在于清单似乎没有效果(即使我将该级别更改为需要管理员) – 2010-12-20 13:28:48
清单明确有效吗?例如它是UTF-8编码的吗? – MarkJ 2010-12-20 16:24:23