Visual Studio Post Build Event MT.команда ехе выдает код 9009

Привет, я запускаю следующую команду из моего события сборки post:

C:Program FilesMicrosoft SDKsWindowsv7.0Abinmt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"

он терпит неудачу с выходом с кодом 9009... Я не понимаю, почему это происходит; какие-либо предложения?

4 ответов


попробуйте добавить кавычки mt.exe путь, например:

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

кроме того, убедитесь, что путь является действительным.

надеюсь, что это помогает. Я весь день бьюсь головой о код 9009, и полный цитируемый путь, похоже, заставляет его работать.


Exit code 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 находясь в корневом каталоге, вся эта команда терпит неудачу. Инкапсуляция пути и исполняемого файла в кавычках приведет к тому, что все выражение будет оцениваться как одна команда, поэтому все должно работать нормально, если вы измените команду post-build на:

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

или использовать для VisualStudio x86 в Windows x64

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

вот возможное решение:

вы можете использовать событие Post build функциональные возможности Visual Studio это ввод команды выше: mt.исполняемый -манифест приложения.manifest-outputresource: myapplication.exe;#1. Это, вероятно, не будет работать и Visual Студия даст вам ошибку, как "...завершился с кодом 9009...".

вы должны отредактировать файл csproj, используя например, блокнот и раскомментировать теги XML, связанные с целью Name=" AfterBuild " (вы можете найти их в конце файла обычно). Затем, разместить теги, связанные с PostBuildEvent в тегах, связанных к AfterBuild и после этого, перезагрузите проект и компиляция. Он будет производить .exe-файл, который необходимо выполнить с правами администратора.


пока не прочитал эту тему, я глупо предположил, что VS будет знать, где mt.exe жизнь. +1 к @james

поскольку для текущего SDK нет встроенного макроса, я полагался на систему envar,windowssdkdir

 "%windowssdkdir%\bin\mt.exe"