Какие программы должны иметь ресурс манифеста? - PullRequest
3 голосов
/ 22 июня 2010

Новые среды разработки Microsoft, такие как Visual Studio 2008 или 2010, по умолчанию создают исполняемые файлы с ресурсом манифеста.Но у меня все еще есть некоторые проекты в Visual Studio 6, и мне нужно скомпилировать их для максимальной совместимости с Win Vista и Win 7.
Поэтому у меня много вопросов о ресурсах манифеста:
1. Требуется ли ресурс манифеста для созданияправильно сформированное приложение для Win7 или WinVista?
2. Какая информация требуется в минимальном манифесте WinVista и Win7?
3. Может ли неправильный ресурс манифеста вызвать Помощник по совместимости программ под Windiws 7?
4. Является ли манифестресурс, необходимый для DLL?
5. Где я могу получить информацию об использовании манифестов?

Ответы [ 2 ]

3 голосов
/ 22 июня 2010

1.Требуется ли ресурс манифеста для создания правильно сформированного приложения для Win7 или WinVista?

Без манифеста (с элементом requiredExecutionLevel) Windows Vista и Windows 7 используют эвристику, чтобы попытаться угадать, является ли приложение установкойapplication - это означает, что обычное приложение может без видимой причины начать запуск параметров повышения UAC.

requiredExecutionLevel также указывает системе НЕ виртуализировать доступ к защищенным ресурсам.

2.Какая информация требуется в минимальном манифесте WinVista и Win7?

По крайней мере запрашиваемыйExecutionLevel, чтобы UAC канонически знал, что вам требуется повышение или нет, и не виртуализировать доступ к программным файлам или HKLM.

3.Может ли неправильный манифест ресурса вызвать Помощник по совместимости программ под Windiws 7?

с манифестом, Windows Vista и 7 подумают, что вы «современное» приложение, которое просто сломано.Логика помощника по совместимости программ зарезервирована для унаследованных приложений - т.е. приложений без манифеста или с манифестом с записями только для XP (т. Е. Без требуемого уровня ExectionLevel).

4.Требуется ли ресурс манифеста для DLL?

Начиная с Windows 7, только если Dll использует его для привязки к параллельным сборкам.MSDev Studio создает манифесты в Dll с элементами requiredExecutionLevel, но фактически создает недопустимую Dll, которая не может быть успешно загружена в некоторых ситуациях.

5.Где я могу получить информацию об использовании манифестов?

На MSDN: Изолированные приложения и параллельные сборки - единственное известное мне официальное упоминание о том, что даже предпринимаются попытки описать схему манифестаи как их можно использовать.


Подводя итог: если вы разрабатываете - и, следовательно, предположительно проверили поведение своих приложений - в Vista или Windows 7, было бы лучше, если бы вы включили манифест, чтобы избежатьВаша заявка рассматривается как устаревшая.

2 голосов
/ 22 июня 2010

Несколько причин, по которым вам может понадобиться манифест. Прежде всего, вам нужно сообщить Windows, что ваша программа знает политики UAC. Для этого требуется манифест, содержащий элемент <requestedExecutionLevel>. Если этого не хватает, Windows будет рассматривать вашу программу как устаревшую и перенаправлять небезопасный доступ к реестру и файловой системе. Записи в привилегированные ключи реестра перенаправляются в HKCU. Запись файлов в привилегированные каталоги перенаправляется в изолированное хранилище.

Вам понадобится манифест, если ваша программа использует библиотеки DLL, которые хранятся в параллельном кэше Windows. Это довольно маловероятно, если вы все еще используете VS6. WinSxS используется для библиотек MFC и CRT программами VS2005 и VS2008. Но не VS2010, по многочисленным просьбам клиентов MSFT.

Вам понадобится манифест, если вы хотите включить визуальные темы для своего приложения. Требуется для загрузки современной версии общих элементов управления из comctl32.dll версии 6.0, которая хранится в параллельном кэше, а не в устаревшей версии, хранящейся в system32.

И вам нужен манифест, если вы используете COM без регистрации, записи манифеста заменяют то, что обычно записывается в реестр, что позволяет локальное развертывание внутрипроцессных серверов COM.

Большая часть этого автоматизирована в современных версиях Visual Studio.

...