Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mt.exe:常规错误c101008d:未能将更新的清单写入文件的资源。。。访问被拒绝 我经常遇到这个问题,即使我构建了一个新的C++项目并尝试构建一个发布文件。_C++_Visual Studio_Visual Studio 2008 - Fatal编程技术网

mt.exe:常规错误c101008d:未能将更新的清单写入文件的资源。。。访问被拒绝 我经常遇到这个问题,即使我构建了一个新的C++项目并尝试构建一个发布文件。

mt.exe:常规错误c101008d:未能将更新的清单写入文件的资源。。。访问被拒绝 我经常遇到这个问题,即使我构建了一个新的C++项目并尝试构建一个发布文件。,c++,visual-studio,visual-studio-2008,C++,Visual Studio,Visual Studio 2008,我使用VisualStudio2008。可能导致此问题的一个原因是我的代码保存在服务器磁盘上,而不是本地硬盘上 mt.exe:一般错误c101008d:未能将更新的清单写入文件“.\Release\PGTS_version17C.exe”的资源。进程无法访问该文件,因为其他进程正在使用该文件 有人知道怎么解决这个问题吗?谢谢。如果您正在嵌入清单文件,您的防病毒程序可能会在嵌入清单之前锁定并扫描您的exe文件 我建议您在读取调试和发布输出文件夹时禁用防病毒功能。有趣的是,我遇到了完全相同的错误,整

我使用VisualStudio2008。可能导致此问题的一个原因是我的代码保存在服务器磁盘上,而不是本地硬盘上

mt.exe:一般错误c101008d:未能将更新的清单写入文件“.\Release\PGTS_version17C.exe”的资源。进程无法访问该文件,因为其他进程正在使用该文件


有人知道怎么解决这个问题吗?谢谢。

如果您正在嵌入清单文件,您的防病毒程序可能会在嵌入清单之前锁定并扫描您的exe文件


我建议您在读取调试和发布输出文件夹时禁用防病毒功能。

有趣的是,我遇到了完全相同的错误,整个项目的“重建”解决了这个问题

禁用杀毒软件对我很有效

转到
Debug
和/或
Release
文件夹,右键单击并递归取消设置只读属性


在中找到此提示并解决了我的问题

如果您使用Hudson/Jenkins创建版本,重新启动它可以为我解决问题。

以“管理员身份运行”打开visual studio 2010,然后重新重建。

如果您不需要生成清单文件,我通过停止并禁用“计时服务”(FireEye的一部分)解决了此错误。

,只要启动它,它就会解决问题

转到项目(右键单击)

性质

链接器

清单文件

生成清单

将“是”更改为“否”

它可以在VS2008上为我解决问题,而无需禁用反病毒功能。;)


享受:)

我使用了一个用于
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;
}
#包括
#包括
#包括
//从带有“cl/O2/Gy/Femt.exe mt wrapper.cpp”的Visual Studio命令提示符生成
内部cdecl wmain(内部argc、WCHAR**argv、WCHAR**env)
{
//停止输出文本。
fclose(stdout);
fclose(stderr);
//运行已重命名为mt-orig.exe的原始mt.exe。
对于(;;)
{
//尝试运行原始机器翻译。
intptr\u t iStatus=\u wspawnve(\u P\u WAIT,L“C:\\Program Files(x86)\\Microsoft SDK\\Windows\\v7.0A\\Bin\\mt orig.exe”,argv+1,env);
如果(iStatus==0)
打破
//稍等片刻后再试一次。
::睡眠(100);
}
返回0;
}
构建此程序,转到您的
C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\Bin
文件夹,将旧的
mt.exe
重命名为
mt orig.exe
(将
mt orig.config
重命名为
mt orig.exe
),并将此包装程序作为
mt.exe
放入其中。现在,当您构建时,它将重试运行原始的
mt.exe
,直到成功

奇怪的是,当确定
mt.exe
已成功时,MSBuild似乎没有检查零状态-它似乎在查找写入stdout/stderr的错误消息。因此,该程序在生成原始的
mt.exe
之前关闭这两个。任何感到勤奋的人都可以应用找到的建议来保存原始
mt.exe成功运行的输出,并将其输出到stdout/stderr。

尝试以下方法:

  • 禁用AV
  • 临时重命名您的exe,使其不包含任何单词UAC magic words(安装、安装、修补、升级)
  • 确保您具有写入权限
  • 使用mt命令注入清单
  • 重新命名你的exe

  • 这不是权限或实际的文件访问问题(AV)

    您可以添加一个标志,使编译器检查清单的有效性

    此验证将修复此问题,因此您无需再次重建它。
    这对于运行实际构建机器或自动构建脚本的任何人来说都非常重要,因为您不想手动干预:

    添加此标志:
    项目属性->配置属性->清单工具->命令行->其他选项:

    /validate_manifest
    

    为了完整,你是一个救星+1,这帮了我很大的忙。就连WindowsDefender似乎也是这样。我已将文件夹添加到排除列表中,如果您有Windows Defender,请使用以下步骤并关闭实时保护:任何特定品牌的防病毒软件?如果安装了avast Antivirus,然后这个问题发生了。在VS2010上也为我工作过。这正是我所需要的。这不是问题所在,因为错误仍然存在。这似乎是一些间歇性的问题-有时编译工作正常,有时不正常。。。当系统升级到Windows 10时显示(使用我的公司与该图像一起使用的任何有效负载)。在我的旧Windows 7系统下从来没有出现过问题。我已将您的代码用作上项目的基础。希望你不会介意。@ElDorado:我当然不介意!谢谢你的夸奖!这解决了我的问题。如您所说,通常是
    构建机器
    自动构建脚本