为什么oscd下的oscdimg.exe不被识别为内部或外部命令,可操作程序或批处理文件

问题描述 投票:0回答:1

在Visual Studio(2015年和2017年)上,我有一个我在AfterBuild上运行的批处理文件。

  <Target Name="AfterBuild">  
    <Exec Command="&quot;$(ProjectDir)\test.bat&quot;" 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周围采用额外的双引号(因为没有空格),错误也不会消失。

任何帮助,将不胜感激。

谢谢

visual-studio batch-file build package iso
1个回答
0
投票

感谢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 &quot;$(ProjectDir)\test.bat&quot;" WorkingDirectory="$(ProjectDir)" />
  </Target>

我这样做是为了避免更改有可能自行运行的批处理文件(意味着从64位资源管理器运行)

© www.soinside.com 2019 - 2024. All rights reserved.