Вопрос

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

<Ол>
  • Создайте две новые папки на рабочем столе (допустим, имена папок A и B)
  • Скопируйте приложение Microsoft GraphEdit ( graphedt.exe ) в папку A, а затем создайте пустой файл 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 сбросит старое запомненное состояние, если вы измените размер EXE или дату последнего изменения.

    Это было полезно?

    Решение

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top