2011-01-13 4 views
12

Hi Używam następujące polecenia z mojego postu build imprezy:Visual Studio post zbudować zdarzeń MT.exe polecenie kończy się niepowodzeniem z kodem 9009

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

Jest niepowodzeniem z kodem 9009 odszedł ... Nie zrozum, dlaczego tak się dzieje; jakieś sugestie?

+0

Możliwy duplikat [Co to znaczy „wyszedł z kodem 9009” znaczy w tym budowy ?] (http://stackoverflow.com/questions/1351830/what-does-exited-with-code-9009-mean-during-this-build) –

Odpowiedz

18

spróbuj dodać cudzysłowy wokół ścieżki mt.exe, np .:

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

Ponadto, upewnij się, że ścieżka jest prawidłowa.

Mam nadzieję, że to pomoże. Cały dzień walczę z kodem 9009, a cała cytowana ścieżka sprawia, że ​​działa.

+0

To działało dla mojego zdarzenia Post Build mpress.exe. – deerchao

+2

Nigdy nie wiedziałem, dlaczego ludzie nie lubią spacji w nazwach katalogów/plików. Teraz robię ... – Nolonar

+0

Uratowałeś mój dzień :) –

1

Oto potencjalne rozwiązanie:

Można użyć post zbudować zdarzenie funkcjonalność Visual Studio zrobić to wpisujac powyżej: mt.exe -manifest app.manifest -outputresource: MyApplication .exe; # 1. Prawdopodobnie to nie zadziała, a Visual Studio dostarczy błąd podobny do "... zakończony kodem 9009 ...".

Musisz edytować plik csproj korzystając np notatnik i usuń tagi XML związanej z docelowym name = „AfterBuild” (można je znaleźć na końcu pliku zazwyczaj). Następnie, umieść znaczniki związane z PostBuildEvent w tagach powiązanych z dla AfterBuild, a następnie załaduj ponownie projekt i skompiluj go. Zostanie utworzony plik .exe w wersji , który musi zostać wykonany z uprawnieniami administratora na poziomie .

7

Kod zakończenia 9009 jest błędem pliku. Przestrzenie istniejące w ścieżce do polecenia budowania postu powodują błędy w wierszu polecenia, chyba że uwzględnisz cudzysłowy wokół całej ścieżki i nazwy pliku wykonywalnego. Zasadniczo, w poleceniu po kompilacji, to stara się wykonać C:\Program z argumentami:

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

Ponieważ oczywiście nie robić mieć plik o nazwie Program znajdujący się w twoim katalogu głównym, całe to polecenie kończy się niepowodzeniem.Enkapsulacji i ścieżkę do pliku wykonywalnego w cudzysłowach spowoduje cały wyraz być oceniane jako jedno polecenie, więc wszystko powinno działać dobrze, jeśli zmienisz polecenia post-build do:

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

lub używać do VisualStudio x86 Windows x64

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

Ta odpowiedź jest o wiele lepsza niż bardziej upowszechniona, zatwierdzona odpowiedź. Nie wszystkie błędy "Nie znaleziono pliku" są powiązane. Dziękuję za Twoją odpowiedź. –

+1

Upewnij się również, że użytkownik uruchamiający kompilację ma dostęp do lokalizacji systemu plików. –

0

Do czytania tego wątku, głupio byłoby założyć VS wiem gdzie mt.exe życie. +1 do @james

ponieważ nie ma wbudowanego w makro dla bieżącego SDK, że oparła się na envar systemu, windowssdkdir

"%windowssdkdir%\bin\mt.exe" 
+0

Mój komputer nie ma takiej zmiennej środowiskowej zdefiniowanej jako – DaveInCaz

+0

@DaveInCaz, inne zgłosiły brakujące envar. Dla mojej odpowiedzi miałem na myśli stację roboczą Windows 7, która została uruchomiona około 6 lat temu. Nie pamiętam, jak skonfigurowano envar. – bvj