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