mt.exe: общая ошибка c101008d: не удалось записать обновленный манифест в ресурс файла ... Доступ запрещен - PullRequest
36 голосов
/ 23 сентября 2010

У меня часто возникает эта проблема, даже когда я создаю новый проект C ++ и пытаюсь создать файл релиза.

Я использую Visual studio 2008. Одна из причин, которая может вызвать эту проблему, - мой код сохранен надиск сервера, а не на локальном жестком диске.

mt.exe: общая ошибка c101008d: Не удалось записать обновленный манифест в ресурс файла ".. \ Release \ PGTS_version17C.exe".Процесс не может получить доступ к файлу, потому что он используется другим процессом.

Кто-нибудь знает, как решить эту проблему?Спасибо.

Ответы [ 11 ]

42 голосов
/ 14 декабря 2010

Если вы встраиваете файл манифеста, ваша антивирусная программа может заблокировать и сканировать ваш exe-файл перед встраиванием манифеста.

Я рекомендую отключить антивирус для чтения ваших выходных папок DEBUG и RELEASE.

12 голосов
/ 15 марта 2014

Перейдите к папкам (папкам) Debug и / или Release, щелкните правой кнопкой мыши и отмените, рекурсивно, свойство Только для чтения.

Нашел этот совет в MSDN Community и решил мою проблему!

7 голосов
/ 10 сентября 2013

Достаточно забавно, у меня была та же самая ошибка, и "перестройка" на всем проекте разрешила ее.

6 голосов
/ 09 февраля 2017

Если это не права доступа или проблема с доступом к файлу (AV) ...

Вы можете добавить флаг, чтобы компилятор проверял правильность манифеста.

Эта проверка исправит проблему, поэтому вам больше никогда не придется ее перестраивать.
Это очень важно для тех, кто использует настоящий Build-Machine или автоматический buildscript, где вы не хотите вручнуювмешиваться:

Добавить этот флаг:
Свойства проекта -> Свойства конфигурации -> Инструмент манифеста -> Командная строка -> Дополнительные параметры:

/validate_manifest
4 голосов
/ 11 февраля 2016

Если вам не нужно создавать файл манифеста, просто отключите его, чтобы решить проблему.

Перейти к проекту (щелкните правой кнопкой мыши)

свойства

Linker

Файлы манифеста

Создать манифест

измените Да на Нет

Это решило проблему для меня на VS2008 без отключения Антивируса. ;)

Наслаждайтесь:)

4 голосов
/ 09 марта 2014

отключение Антивируса у меня сработало.

2 голосов
/ 03 декабря 2014

Откройте Visual Studio 2010 как «Запуск от имени администратора» и перестройте заново.

1 голос
/ 03 октября 2016

Попробуйте это:

  1. Отключить AV
  2. Временно переименуйте ваш exe-файл, чтобы он не содержал никаких слов волшебных слов UAC (установка, настройка, исправление, обновление)
  3. убедитесь, что у вас есть права на запись
  4. используйте команду mt для внедрения манифеста
  5. переименуйте обратно свой exe
1 голос
/ 31 августа 2016

Я обошел это с помощью программы-оболочки для mt.exe, которая перезапускала ее до тех пор, пока она не преуспела. Сохраните следующий код как mt-wrapper.cpp:

#include <windows.h>
#include <stdio.h>
#include <process.h>

// Build from a Visual Studio Command Prompt with "cl /O2 /Gy /Femt.exe mt-wrapper.cpp"

int __cdecl wmain(int argc, WCHAR **argv, WCHAR **env)
{
    // Stop outputting text.
    fclose(stdout);
    fclose(stderr);

    // Run the original mt.exe, which has been renamed to mt-orig.exe .
    for (;;)
    {
        // Try to run the original mt.
        intptr_t iStatus = _wspawnve(_P_WAIT, L"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\mt-orig.exe", argv + 1, env);
        if (iStatus == 0)
            break;

        // Try again, after a short wait.
        ::Sleep(100);
    }

    return 0;
}

Создайте эту программу, перейдите в папку C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin, переименуйте старую mt.exe в mt-orig.exemt.exe.config в mt-orig.exe.config) и поместите эту программу-оболочку в mt.exe. Теперь, когда вы строите, он будет пытаться запустить исходный mt.exe, пока не добьется успеха.

Как ни странно, MSBuild, похоже, не проверяет нулевой статус, когда решает, что mt.exe успешно & mdash; похоже, он ищет сообщения об ошибках, записанные в stdout / stderr. Таким образом, эта программа закрывает оба из них, прежде чем создать оригинальную mt.exe. Любой, кто чувствует себя трудолюбивым, может применить найденный совет здесь , чтобы сохранить результат успешного запуска оригинального mt.exe и вывести его в stdout / stderr.

0 голосов
/ 08 октября 2015

Я решил эту ошибку, остановив и отключив «Службу синхронизации» (часть FireEye)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...