我为在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安装的一些问题而不是而不是清单的错误。有什么想法吗?
答案 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 24 "vb6.exe.manifest"