I often have this problem even when I build a new C++ project and try to build a release file.
I use Visual studio 2008. One thing that may cause this problem is my code
Try this:
It it's not a permissions or actual file access problem (AV)...
You can add a flag to make the compiler check the validity of the manifest.
This validation will fix the problem so you'll never have to rebuild it again.
This is very important for anyone who's running an actual Build-Machine or automatic buildscript where you don't want to manually interfere:
Add this flag:
Project properties -> Configuration Properties -> Manifest Tool -> Command Line -> Additional options:
/validate_manifest
I worked around this with a "wrapper" program for mt.exe
, one that reran it until it succeeded. Save the following code as 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;
}
Build this program, go to your C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
folder, rename the old mt.exe
to mt-orig.exe
(and the mt.exe.config
to mt-orig.exe.config
), and put this wrapper program in there as mt.exe
. Now, when you build, it will retry running the original mt.exe
until it succeeds.
Oddly, MSBuild doesn't seem to check for a zero status when deciding that mt.exe
has succeeded — it seems to look for error messages written to stdout/stderr. So this program closes both of those before spawning the original mt.exe
. Anyone feeling industrious can apply the advice found here to save the output of the successful run of the original mt.exe
, and output it to stdout/stderr.
If you're using Hudson/Jenkins to create releases restarting it solved the problem for me.
I solved this error by stopping and disabling the 'Timing Service' (part of FireEye)