Сбой команды Visual Studio Post Build Event MT.exe с кодом 9009 - PullRequest
12 голосов
/ 13 января 2011

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

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

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

Ответы [ 4 ]

18 голосов
/ 01 февраля 2011

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

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

Также убедитесь, что путь правильный.

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

9 голосов
/ 16 февраля 2012

Код выхода 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"
1 голос
/ 21 июня 2016

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

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

 "%windowssdkdir%\bin\mt.exe"
1 голос
/ 19 января 2011

Вот потенциальное решение:

Для этого можно использовать функциональность событий Post build в Visual Studio, введя указанную выше команду: mt.exe -manifest app.manifest -outputresource: myapplication.EXE; # 1.Это, вероятно, не сработает, и Visual Studio выдаст вам сообщение об ошибке типа «... exited with code 9009 ...».

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

...