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"