Подтвердить что ты не робот

Mt.exe: общая ошибка c101008d: Не удалось записать обновленный манифест в ресурс файла... Доступ запрещен

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Перейдите в папку Debug и/или Release, щелкните правой кнопкой мыши и отмените, рекурсивно, свойство Read-Only.

Нашел этот совет в сообществе

Ответ 3

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

Ответ 4

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

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

свойства

компоновщика

Манифестные файлы

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

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

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

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

Ответ 5

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

Ответ 6

Это не разрешение или проблема с доступом к файлу (AV)...

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

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

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

/validate_manifest

Ответ 7

Откройте visual studio 2010 как "Запуск от имени администратора" и снова перестройте.

Ответ 8

Я работал над этим с помощью программы "wrapper" для 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 преуспел — он, похоже, ищет сообщения об ошибках, записанные в stdout/stderr. Таким образом, эта программа закрывает оба из них до появления оригинала mt.exe. Любой, кто чувствует себя трудолюбивым, может применить совет, найденный здесь, чтобы сохранить результат успешного запуска исходного mt.exe и вывести его на stdout/stderr.

Ответ 9

Попробуйте следующее:

  • Отключить AV
  • Временно переименуйте свой exe, чтобы он не содержал никаких слов в словах UAC (установка, настройка, исправление, обновление).
  • убедитесь, что у вас есть права на запись.
  • используйте команду mt, чтобы ввести манифест
  • переименуйте свой exe

Ответ 10

Если вы используете Hudson/Jenkins для создания перезапуска релизов, он решил проблему для меня.

Ответ 11

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