13

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

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

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

4

4 回答 4

18

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

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

另外,请确保该路径有效。

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

于 2011-02-01T17:13:48.000 回答
10

退出代码 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"
于 2012-02-16T19:05:04.237 回答
1

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

您可以使用 Visual Studio 的发布生成事件功能来执行此操作,键入上面的命令:mt.exe -manifest app.manifest -outputresource:myapplication.exe;#1。这可能不起作用,Visual Studio 会给你一个错误,比如“...exited with code 9009...”。

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

于 2011-01-19T11:51:17.730 回答
1

在阅读此线程之前,我愚蠢地认为 VS 会知道mt.exe生活在哪里。+1 给@詹姆斯

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

 "%windowssdkdir%\bin\mt.exe"
于 2016-06-21T03:20:48.363 回答