默认情况下,Visual Studio 2008或2010等新的微软IDE会创建带有清单资源的exe文件。但我仍然在Visual Studio 6中有一些项目,我需要编译它们以最大程度地兼容Win Vista和Win 7
所以我对清单资源有很多疑问:
1.为Win7或WinVista创建格式良好的应用程序需要显示资源吗?
2. WinVista和Win7在最小清单中需要哪些信息?
3.错误的清单资源是否可以触发Windiws 7下的程序兼容性助手?
4. DLL是否需要清单资源?
5.我在哪里可以获得有关使用清单的信息?
答案 0 :(得分:3)
<强> 1。是否需要为Win7或WinVista创建格式良好的应用程序所需的清单资源?
没有清单(带有requestedExecutionLevel元素)Windows Vista和Windows 7使用启发式方法来尝试猜测应用程序是否是一个安装应用程序 - 这意味着正常的应用程序可能无法辨别,开始触发UAC提升提示。
requestedExecutionLevel还告诉系统不虚拟化对受保护资源的访问。
<强> 2。 WinVista和Win7在最小清单中需要哪些信息?
至少是requestedExecutionLevel所以UAC规范地知道你做了 - 或者不 - 要求提升,并且不虚拟化对Program Files或HKLM的访问。
第3。 Windiws 7下可能出现错误的清单资源触发程序兼容性助手吗?
带有清单,Windows vista和7会认为你是一个“现代”的应用程序,只是被打破。程序兼容性助理逻辑是为遗留应用程序保留的 - 即没有清单的应用程序或只有XP的条目的清单(即缺少requestedExecutionLevel)。
<强> 4。 DLL是否需要清单资源?
从Windows 7开始仅当Dll使用它绑定到并排程序集时。 MSDev Studio使用requestedExecutionLevel元素在Dll中创建清单,但这实际上会产生无效的Dll,在某些情况下无法成功加载。
<强> 5。我在哪里可以获得有关使用清单的信息?
在MSDN上:Isolated Applications and Side By Side Assemblies是我所知道的唯一官方参考,即使尝试描述清单模式以及如何使用它们。
总结一下:如果您正在开发 - 因此可能已经在Vista或Windows 7上测试了您的应用行为 - 最好是包含清单以避免将您的应用程序视为遗留应用程序。
答案 1 :(得分:2)
您可能需要清单的几个原因。首先,您需要告诉Windows您的程序了解UAC策略。这需要包含<requestedExecutionLevel>
元素的清单。如果缺少该功能,Windows会将您的程序视为旧程序,并重定向对注册表和文件系统的不安全访问。对特权注册表项的写入被重定向到HKCU。对特权目录的文件写入将重定向到隔离存储。
如果您的程序使用存储在Windows并行缓存中的DLL,则需要清单。如果你仍然使用VS6,情况就不太可能发生。 VSS5和VS2008程序将WinSxS用于MFC和CRT库。但不是VS2010,受到MSFT客户的欢迎。
如果要为应用程序启用可视主题,则需要清单。需要从comctl32.dll版本6.0加载现有版本的公共控件,存储在并行缓存中,而不是存储在system32中的旧版本。
如果您使用无注册表的COM,则需要清单,清单条目将替换通常写入注册表的内容,允许本地部署进程内COM服务器。
大部分内容都是在Visual Studio的现代版本中自动完成的。