在Visual Studio(2015年和2017年)上,我有一个我在AfterBuild上运行的批处理文件。
<Target Name="AfterBuild">
<Exec Command=""$(ProjectDir)\test.bat"" WorkingDirectory="$(ProjectDir)" />
</Target>
在批处理文件中,它非常简单
"%SYSTEMROOT%\System32\oscdimg.exe" -n -m "%~dp0.\bin" -l"testdisk" "%~dp0\test.iso"
当我单独运行批处理文件(简单地双击bat文件)时,它可以根据需要运行。
但是,当Visual Studio转到AfterBuild时,会出现以下错误。
'“C:\ WINDOWS \ System32 \ oscdimg.exe”'无法识别为内部或外部命令,可运行程序或批处理文件。
有人会知道为什么会这样吗?视觉工作室AfterBuild有限制吗?即使我在oscdimg.exe周围采用额外的双引号(因为没有空格),错误也不会消失。
任何帮助,将不胜感激。
谢谢
感谢RGuggisberg with his comment,我找到了这个问题的原因。让我引用他的话
VS可能是32位应用程序。因此“C:\ WINDOWS \ System32”被重定向到“C:\ Windows \ SysWOW64”并且oscdimg.exe可能不存在。尝试使用:“C:\ Windows \ Sysnative \ oscdimg.exe”请参阅www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm - RGuggisberg
所以我决定从VS AfterBuild运行64位版本的命令提示符。
<Target Name="AfterBuild">
<Exec Command="%windir%\sysnative\cmd.exe /c "$(ProjectDir)\test.bat"" WorkingDirectory="$(ProjectDir)" />
</Target>
我这样做是为了避免更改有可能自行运行的批处理文件(意味着从64位资源管理器运行)