it-swarm.com.ru

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

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

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

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

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

34
Jackie

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

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

39
Zamboni

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

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

10
Girardi

Как ни странно, у меня была та же самая ошибка, и «перестройка» на всем проекте решила ее. 

7
AnyOneElse

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

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

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

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

/validate_manifest
5
Yochai Timmer

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

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

свойства

Linker

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

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

изменить это да на нет

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

Наслаждаться :)

4
Kannan

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

3
ross

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

2
RAK

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

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

Я обошел это с помощью программы-обертки для 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.

1
ulatekh

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

0
gd73

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

0
CEamonn