Событие сборки сборки Visual Studio Post MT.exe завершилось с кодом 9009
Привет. Я запускаю следующую команду из события post post:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
Он не работает с Exited с кодом 9009... Я не понимаю, почему это происходит; любые предложения?
Ответы
Ответ 1
Попробуйте добавить цитаты вокруг пути mt.exe
, например:
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"
Также убедитесь, что путь действителен.
Надеюсь, это поможет. Я весь день бил головой против кода 9009, и полный путь цитирования, похоже, заставляет его работать.
Ответ 2
Код выхода 9009 - это ошибка, не найденная в файле. Пространства, которые существуют на вашем пути к команде post build, вызывают ошибки в командной строке, если вы не включаете кавычки по всему пути и имени исполняемого файла. По существу, в вашей команде 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"
Ответ 3
Вот потенциальное решение:
Вы можете использовать событие Post build функциональности Visual Studio это набрав команду выше: mt.exe -manifest app.manifest -outputresource: myapplication.exe; # 1. Вероятно, это не сработает, и Visual Студия даст вам ошибку, как "... вышел с кодом 9009...".
Вы должны отредактировать файл csproj, используя например, блокнот и раскоммент теги XML, связанные с объектом Name= "AfterBuild" (вы можете найти их в конце файла обычно). Затем, поместите теги, связанные с PostBuildEvent в связанных тегах к AfterBuild, а затем перезагрузить проекта и компиляции. Он будет производить .exe, который необходимо выполнить с правами администратора.
Ответ 4
До тех пор, пока я не прочитал этот поток, я по глупости предположил, что VS будет знать, где живет mt.exe
. +1 до @james
Поскольку нет встроенного макроса для текущего SDK, я полагался на системную envar, windowssdkdir
"%windowssdkdir%\bin\mt.exe"