О файле манифеста - PullRequest
       11

О файле манифеста

12 голосов
/ 06 января 2009

Недавно я столкнулся с очень странной проблемой, которая возникает только в Windows XP SP3 и Vista. Вот мои шаги:

  1. Создание двух новых папок на рабочем столе (предположим, имена папок A и B)
  2. Скопируйте приложение Microsoft GraphEdit (graphedt.exe) в папку A, а затем создайте пустой файл graphedt.exe.manifest. Запустите graphedt.exe, вы увидите сообщение об ошибке, graphedt.exe не может быть запущен из-за неправильного манифеста.
  3. Скопируйте приложение Microsoft GraphEdit (graphedt.exe) в папку B, запустите graphedt.exe и закройте его, затем создайте пустой файл graphedt.exe.manifest, снова запустите graphedt.exe, вы увидите, что файл манифеста не может быть применен к graphedt.exe. Но если вы измените время последнего изменения graphed.exe, манифест снова заработает.

Кажется, что Windows запомнит статус в первый раз, когда EXE-файл использует файл манифеста, но также Windows сбросит старое запомненное состояние, если вы измените размер EXE или дату последнего изменения.

1 Ответ

18 голосов
/ 16 января 2009

[Я являюсь текущим сопровождающим SxS в Microsoft]

Хорошее расследование Иган. Вы описываете поведение в Vista, а не в XP SP3.

Проверка наличия манифеста при каждом запуске приложения будет проблемой производительности, поскольку обычно приложения либо имеют манифест, либо его нет, и это состояние не сильно меняется. По этой причине в Vista при первом запуске приложения мы кэшируем немного, описывая «это приложение имеет связанный манифест» или «это приложение не имеет манифеста». Когда вы запустили graphedt.exe в первый раз, Windows кэшировала отсутствие манифеста и впоследствии не будет искать его. Чтобы сбросить кэш, обновите время последнего изменения исполняемого файла.

...