web-dev-qa-db-fra.com

mt.exe: erreur générale c101008d: échec de l'écriture du manifeste mis à jour dans la ressource du fichier ... L'accès est refusé

J'ai souvent ce problème même lorsque je construis un nouveau projet C++ et que je tente de générer un fichier de version.

J'utilise Visual Studio 2008. Une des causes de ce problème est que mon code est enregistré sur le disque du serveur, pas sur le disque dur local. 

mt.exe: erreur générale c101008d: impossible d'écrire le manifeste mis à jour dans la ressource du fichier "..\Release\PGTS_version17C.exe". Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus.

Quelqu'un sait comment résoudre ce problème? Merci.

34
Jackie

Si vous intégrez un fichier manifeste, votre programme anti-virus peut verrouiller et analyser votre fichier exe avant d’intégrer le manifeste. 

Je recommande de désactiver l'anti-virus lors de la lecture de vos dossiers de sortie DEBUG et RELEASE.

39
Zamboni

Accédez au (x) dossier (s) Debug et/ou Release, cliquez avec le bouton droit de la souris et désélectionnez, de manière récursive, la propriété en lecture seule.

J'ai trouvé cette astuce dans la communauté MSDN et résolu mon problème!

10
Girardi

Assez drôle, j'ai eu exactement la même erreur et une "reconstruction" de tout le projet l'a résolue. 

7
AnyOneElse

Ce n’est pas un problème d’autorisation ou d’accès au fichier (AV) ...

Vous pouvez ajouter un indicateur pour que le compilateur vérifie la validité du manifeste. 

Cette validation résoudra le problème afin que vous n'ayez plus jamais à le reconstruire.
Ceci est très important pour quiconque exécute un buildscript automatique ou un buildscript automatique dans lequel vous ne souhaitez pas intervenir manuellement:

Ajouter ce drapeau:
Propriétés du projet -> Propriétés de configuration -> Outil de manifeste -> Ligne de commande -> Options supplémentaires:  

/validate_manifest
5
Yochai Timmer

Si vous n'avez pas besoin de générer le fichier Manifest, il suffit de le désactiver pour résoudre le problème.

Aller au projet (clic droit)

propriétés

Lieur

Fichiers manifestes

Générer un manifeste 

changez-le Oui à Non

Il résout le problème pour moi sur VS2008 sans désactiver Anti-virus. ;)

Prendre plaisir :)

4
Kannan

désactiver l'antivirus a fonctionné pour moi. 

3
ross

Ouvrez Visual Studio 2010 en tant qu '"Exécuter en tant qu'administrateur" et reconstruisez à nouveau.

2
RAK

Essaye ça:

  1. Désactiver AV
  2. Renommez temporairement votre fichier exe afin qu'il ne contienne aucun des mots mots magiques UAC (install, setup, patch, upgrade)
  3. assurez-vous que vous avez les autorisations d'écriture
  4. utiliser la commande mt pour injecter le manifeste
  5. renomme ton exe
1
quick nisip

J'ai travaillé autour de cela avec un programme "wrapper" pour mt.exe, un programme qui le relit jusqu'à ce qu'il réussisse. Enregistrez le code suivant sous le nom 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;
}

Générez ce programme, accédez à votre dossier C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin, renommez l’ancien mt.exe en mt-orig.exe (et le mt.exe.config en mt-orig.exe.config), puis définissez ce programme wrapper sous le nom mt.exe. Maintenant, lors de la création, il tentera à nouveau d'exécuter le mt.exe d'origine jusqu'à ce qu'il réussisse.

Curieusement, MSBuild ne semble pas vérifier l'état zéro lorsqu'il décide que mt.exe a réussi - il semble rechercher les messages d'erreur écrits dans stdout/stderr. Donc, ce programme ferme les deux avant de générer le mt.exe original. Toute personne se sentant industrieuse peut appliquer le conseil trouvé ici pour enregistrer le résultat de l’exécution réussie du mt.exe original et l’afficher sur stdout/stderr.

1
ulatekh

J'ai résolu cette erreur en arrêtant et en désactivant le 'service de synchronisation' (composant de FireEye)

0
gd73

Si vous utilisez Hudson/Jenkins pour créer des versions, le redémarrer a résolu le problème pour moi.

0
CEamonn