2011-01-13 145 views
12

嗨,我从我的后生成事件以下命令:Visual Studio中后生成事件MT.exe命令失败,代码9009

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

它未能与退出,代码为9009 ......我不理解为什么发生这种情况有什么建议么?

+0

的[可能的复制是什么“代码9009退出”此版本中的意思?](http://stackoverflow.com/questions/1351830/what-does-exited-with-code-9009-mean-during-this-build) – 2016-03-17 06:09:58

回答

18

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

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

同时,确保路径是有效的。

希望这会有所帮助。我一整天都在抨击代码9009,并且完全引用了它的路径似乎使它成功。

+0

这适用于我的mpress.exe后建立事件。 – deerchao 2011-12-12 13:17:40

+2

我从来不知道为什么人们不喜欢目录/文件名中的空格。现在我做... – Nolonar 2013-05-03 09:31:15

+0

你节省了我的一天:) – 2014-10-01 06:36:26

1

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

可以使用后生成事件的Visual Studio 功能做 此上方输入命令:mt.exe -manifest app.manifest -outputresource:为MyApplication .EXE;#1。这可能将无法正常工作和Visual Studio的 会给你喜欢 一个错误“...代码为9009退出......”。

你必须编辑使用 例如与目标 NAME =“AfterBuild”记事本并取消 的XML标签的csproj文件(你可以在文件的结尾找到他们 通常情况下)。然后, 地方涉及到相关 到AfterBuild,然后在标签内的 PostBuildEvent标签,重新加载 项目和编译。它将生成一个 .exe文件,需要管理员权限才能执行 。

7

退出代码9009是找不到错误的文件。除非在整个路径和可执行文件名称周围包含引号,否则在通往构建后命令的路径中存在的空格会在命令提示符中导致错误。从本质上讲,在生成后命令,它试图用参数来执行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 64使用的VisualStudio 86

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

直到阅读此线程,我傻傻的假设VS会知道mt.exe生活。 +1 @james

,因为没有内置宏当前SDK,我仗着系统ENVAR,windowssdkdir

"%windowssdkdir%\bin\mt.exe" 
相关问题