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.
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.
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!
Assez drôle, j'ai eu exactement la même erreur et une "reconstruction" de tout le projet l'a résolue.
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
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 :)
désactiver l'antivirus a fonctionné pour moi.
Ouvrez Visual Studio 2010 en tant qu '"Exécuter en tant qu'administrateur" et reconstruisez à nouveau.
Essaye ça:
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.
J'ai résolu cette erreur en arrêtant et en désactivant le 'service de synchronisation' (composant de FireEye)
Si vous utilisez Hudson/Jenkins pour créer des versions, le redémarrer a résolu le problème pour moi.