2010-06-22 54 views
3

默认情况下,像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.我可以在哪里获得有关使用清单的信息?哪些程序必须具有清单资源?

回答

3

1.是否需要显示资源来为Win7或WinVista创建格式良好的应用程序?

没有清单(带有requestedExecutionLevel元素)Windows Vista和Windows 7使用启发式方法来尝试猜测应用程序是否为安装应用程序 - 这意味着正常的应用程序可能没有可识别的原因开始触发UAC提升预兆。

requestedExecutionLevel还告诉系统不虚拟化对受保护资源的访问。

2. WinVista和Win7在最小清单中需要什么信息?

至少是requestedExecutionLevel,所以UAC知道你是否 - 要求提升,并且不虚拟化对程序文件或HKLM的访问。

3. Windiws 7下的程序兼容性助手可能出错吗?

带有清单,Windows vista和7将认为你是一个“现代”的应用程序,它只是被打破了。程序兼容性助手逻辑保留用于遗留应用程序 - 即没有清单的应用程序或具有仅具有XP唯一条目的清单(即缺少requestedExecutionLevel)的应用程序。

4. DLL是否需要manifest资源?

从Windows 7开始只有当Dll使用它来绑定到并行程序集时。 MSDev Studio使用requestedExecutionLevel元素在Dll中创建清单,但实际上会产生无法在某些情况下成功加载的无效Dll。

5.我在哪里可以获得有关使用清单的信息?

在MSDN上:Isolated Applications and Side By Side Assemblies是我所知道的唯一的官方参考资料,即使尝试描述清单模式以及如何使用它们。


总结:如果您正在开发 - 从而有可能测试您的应用程序的行为 - 在Vista或Windows 7,这将是最好的,如果你提供一个清单,以避免你的申请被视为传统应用程序。

2

有几个原因可能需要清单。首先,您需要告诉Windows您的程序了解UAC策略。这需要包含<requestedExecutionLevel>元素的清单。如果缺少这些信息,Windows会将您的程序视为传统程序,并将不安全访问重定向到注册表和文件系统。写入特权注册表键被重定向到HKCU。将文件写入特权目录将重定向到独立存储。

如果您的程序使用存储在Windows并行缓存中的DLL,则需要一个清单。如果你仍然使用VS6,这种情况不太可能发生。 WinSxS通过VS2005和VS2008程序用于MFC和CRT库。但不是VS2010,受到MSFT客户的普遍需求。

如果您要为应用程序启用可视化主题,则需要清单。从comctl32.dll版本6.0加载公共控件的现代版本所需的,它存储在并行缓存中,而不是存储在system32中的旧版本中。

如果您使用无注册表的COM,则清单条目会替换通常写入注册表的内容,从而允许本地部署进程内COM服务器,您需要清单。

大部分情况是在Visual Studio的现代版本中自动执行的。

相关问题