你好,我正在从我的发布后事件中运行以下命令:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
执行时出现代码9009退出错误... 我不明白为什么会发生这种情况,有什么建议吗?
你好,我正在从我的发布后事件中运行以下命令:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
执行时出现代码9009退出错误... 我不明白为什么会发生这种情况,有什么建议吗?
mt.exe
路径周围添加引号,例如:
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"
另外,请确保该路径是有效的。
希望这可以帮到您。我已经花了一整天时间解决错误代码9009,使用完整的带引号路径似乎可以解决问题。
错误代码 9009 表示文件未找到。在后置生成命令的路径中存在空格会导致在命令提示符中出现错误,除非您在整个路径和可执行文件名称周围加上引号。基本上,在您的后置生成命令中,它正在尝试执行 C:\Program
,并带有以下参数:
Files\Microsoft
SDKs\Windows\v7.0A\bin\mt.exe
-manifest "$(ProjectDir)$(TargetName).exe.manifest"
-updateresource:"$(TargetDir)$(TargetName).exe;#1"
由于显然您的根目录中没有名为 Program
的文件,因此此命令将失败。在引号中封装路径和可执行文件将导致整个表达式作为单个命令进行评估,因此如果您更改后置构建命令为以下内容,则应该一切正常:
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
或者在 Windows x64 上使用 VisualStudio x86
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"
这里有一个潜在的解决方案:
您可以使用Visual Studio的Post build事件功能来执行此操作,输入以下命令:mt.exe -manifest app.manifest -outputresource:myapplication.exe;#1。这可能不起作用,Visual Studio会给出类似“...以代码9009退出...”的错误。
您需要使用例如记事本编辑csproj文件并取消注释与Target Name =“AfterBuild”相关的XML标记(通常可以在文件末尾找到它们)。然后,将与PostBuildEvent相关的标记放置在与AfterBuild相关的标记中,然后重新加载项目并编译。它将生成一个需要使用管理员权限执行的.exe文件。
在阅读本主题之前,我愚蠢地认为VS会知道mt.exe
的位置。+1给@james
由于当前SDK没有内置宏,我依靠系统变量windowssdkdir
"%windowssdkdir%\bin\mt.exe"
call "$(DevEnvDir)..\Tools\vsdevcmd.bat"
call "$(DevEnvDir)..\Tools\vsdevcmd.bat"
mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"