【问题标题】:Visual Studio Post Build Event MT.exe command fails with code 9009Visual Studio Post Build Event MT.exe 命令失败,代码为 9009
【发布时间】:2011-06-08 07:16:28
【问题描述】:

您好,我正在从我的后期构建事件中运行以下命令:

C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"

退出并显示代码 9009 失败...我不明白为什么会发生这种情况;有什么建议吗?

【问题讨论】:

标签: visual-studio post-build-event


【解决方案1】:

在阅读此线程之前,我愚蠢地认为 VS 会知道 mt.exe 的位置。 +1 到@james

由于当前SDK没有内置宏,所以我依赖系统envar,windowssdkdir

 "%windowssdkdir%\bin\mt.exe"

【讨论】:

  • 我的电脑没有定义这样的环境变量
  • @DaveInCaz 其他人也报告了丢失的 envar。对于我的回答,我指的是大约 6 年前投入使用的 Windows 7 工作站。我不记得 envar 是如何设置的。
  • 虽然我没有那个特定的环境变量,但我同意我还假设您可以根据这篇文章在构建后事件中使用 mt.exe:msdn.microsoft.com/en-us/library/bb756929.aspx
【解决方案2】:

尝试在mt.exe 路径周围添加引号,例如:

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"

另外,请确保路径有效。

希望这会有所帮助。我整天都在与代码 9009 搏斗,并且完整引用的路径似乎使它起作用。

【讨论】:

    【解决方案3】:

    退出代码 9009 是文件未找到错误。 post build 命令路径中存在的空格会导致命令提示符出现错误,除非您在整个路径和可执行文件名称周围加上引号。本质上,在您的构建后命令中,它正在尝试使用参数执行C:\Program

    • Files\Microsoft
    • SDKs\Windows\v7.0A\bin\mt.exe
    • -manifest "$(ProjectDir)$(TargetName).exe.manifest"
    • -updateresource:"$(TargetDir)$(TargetName).exe;#1"

    由于显然您的根目录中没有名为Program 的文件,因此整个命令都将失败。将路径和可执行文件封装在引号中将导致整个表达式被评估为单个命令,因此如果您将构建后命令更改为:

    "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
    

    或用于 Windows x64 中的 VisualStudio x86

    "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"
    

    【讨论】:

    • 这个答案比得到更多支持的答案要好得多。并非所有“找不到文件”错误都与引用有关。谢谢你的回答。
    • 还要确保运行构建的用户可以访问文件系统位置
    【解决方案4】:

    这是一个潜在的解决方案:

    您可以使用 Post build 事件 Visual Studio 的功能 这键入上面的命令:mt.exe -manifest app.manifest -outputresource:myapplication.exe;#1。这可能行不通和视觉 Studio 会给你一个错误,比如 “...以代码 9009 退出...”。

    您必须使用编辑 csproj 文件 例如记事本和取消注释 与目标相关的 XML 标签 Name="AfterBuild" (你可以找到他们 通常在文件末尾)。然后, 放置相关的标签 相关标签内的 PostBuildEvent 到 AfterBuild,然后重新加载 项目并编译。它会产生一个 需要执行的.exe文件 具有管理员权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      相关资源
      最近更新 更多