О файле манифеста
Недавно я столкнулся с очень странной проблемой, эта проблема возникает только в Windows XP с пакетом обновления 3 (SP3) и Vista. Вот мои шаги:
- Создайте две новые папки на рабочем столе (предполагайте имена папок A и B)
- Скопируйте приложение Microsoft GraphEdit (
graphedt.exe
) в папку, а затем создайте пустой файл graphedt.exe.manifest
. Запустите graphedt.exe
, вы увидите сообщение об ошибке, пробел graphedt.exe
из-за неправильного манифеста.
- Скопируйте приложение Microsoft GraphEdit (
graphedt.exe
) в папку B, запустите graphedt.exe
и закройте его, затем создайте пустой файл graphedt.exe.manifest
, запустите graphedt.exe
снова, вы увидите, что файл манифеста не применим к graphedt.exe
. Но если вы измените последнее измененное время graphed.exe
, манифест будет работать снова.
Кажется, что Windows будет помнить о статусе, когда EXE использует файл манифеста, но также Windows будет reset старым сохраненным статусом, если вы измените размер EXE или последнюю измененную дату.
Ответы
Ответ 1
[Я - текущий поддерживающий SxS в Microsoft]
Хорошее исследование Иган. Вы описываете поведение на Vista, а не на XP SP3.
Исследование существования манифеста при каждом запуске приложения будет проблемой производительности, поскольку обычно приложения либо имеют манифест, либо не делают этого, и это состояние мало меняет. По этой причине в Vista при первом запуске приложения мы кэшируем бит, описывая "это приложение имеет связанный манифест" или "это приложение не имеет манифеста". Когда вы запускаете graphedt.exe в первый раз, Windows кэширует отсутствие манифеста и впоследствии не ищет его. В reset кэш обновите последнее измененное время на исполняемом файле.