您好我从我的帖子构建活动中运行以下命令:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
退出代码9009失败了...我不明白为什么会这样;有什么建议吗?
答案 0 :(得分:18)
尝试在mt.exe
路径周围添加引号,例如:
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe"
另外,请确保路径有效。
希望这会有所帮助。我整天都在反对代码9009,而一条完整的引用路径似乎使它成功。
答案 1 :(得分:9)
退出代码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
的文件,因此整个命令都会失败。将路径和可执行文件封装在引号中将导致整个表达式作为单个命令进行计算,因此如果将构建后的命令更改为:
"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"
答案 2 :(得分:1)
这是一个潜在的解决方案:
您可以使用Post build事件 Visual Studio的功能 这输入上面的命令:mt.exe -manifest app.manifest -outputresource:myapplication.exe;#1。这可能不会起作用和视觉效果 Studio会给你一个错误 “......退出代码9009 ......”。
您必须使用编辑csproj文件 例如记事本和取消注释 与Target相关的XML标记 Name =“AfterBuild”(你可以找到它们 通常在文件的末尾)。然后, 放置与之相关的标签 PostBuildEvent内的标签相关 到AfterBuild然后,重新加载 项目和编译。它会产生一个 需要执行的.exe文件 具有管理员权限。
答案 3 :(得分:1)
在阅读这篇帖子之前,我愚蠢地认为VS会知道mt.exe
的生活地点。 +1到@james
由于当前SDK没有内置宏,我依赖系统envar,windowssdkdir
"%windowssdkdir%\bin\mt.exe"