Почему oscdimg.exe в Visual Studio не распознается как внутренняя или внешняя команда, работающая программа или командный файл - PullRequest
0 голосов
/ 21 марта 2019

В 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 (потому что нет пробелов), ошибка не исчезнет.

Буду признателен за любую помощь.

Спасибо

1 Ответ

0 голосов
/ 22 марта 2019

Благодаря Р.Гуггисбергу с его комментарием Мне удалось найти причину этой проблемы. Позвольте мне процитировать его

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

Поэтому я решил запустить 64-битную версию командной строки из VS AfterBuild.

  <Target Name="AfterBuild"> 
    <Exec Command="%windir%\sysnative\cmd.exe /c &quot;$(ProjectDir)\test.bat&quot;" WorkingDirectory="$(ProjectDir)" />
  </Target>

Я сделал это, чтобы избежать изменения командного файла, который может запускаться сам по себе (имеется в виду запуск из 64-разрядного обозревателя)

...