У меня есть существующий сценарий CMD, который отлично работает. Он запускает приложение из ФАЙЛОВ ПРОГРАММЫ, например
"%PROGRAMFILES%\MyApp\app.exe"
Это лучшее, что я мог придумать:
set strProgramFiles=%ProgramFiles%
if exist "%ProgramFiles(x86)%" set strProgramFiles=%ProgramFiles(x86)%
"%strProgramFiles%\MyApp\app.exe"
Похожий на Правильный ответ Мэтта. В основном в этой версии проверяется полный путь.
SET AppExePath="%ProgramFiles(x86)%\MyApp\app.exe"
IF NOT EXIST %AppExePath% SET AppExePath="%ProgramFiles%\MyApp\app.exe"
%AppExePath%
По сути, вам нужно проверить переменную среды ProgramFiles (x86), чтобы определить, используете ли вы 64-битную Windows или нет. Вот пример командного файла.
if "%programfiles(x86)%zzz"=="zzz" goto 32BIT
echo 64-bit Windows installed
"%PROGRAMFILES(x86)%\MyApp\app.exe"
goto END
:32BIT
echo 32-bit Windows installed
"%PROGRAMFILES%\MyApp\app.exe"
:END
Другой подход - запустить скрипт под 32-битной cmd.exe
, чтобы он мог воспользоваться перенаправлением файловой системы WOW64 и модификации переменных окружения. Если вы можете изменить вызывающего абонента, вам даже не придется изменять рассматриваемый сценарий.
Вы даже можете заставить скрипт определять, когда он выполняется под 64-битной cmd.exe
и перезапустите себя, используя 32-битный cmd.exe
:
@echo off
if "%PROCESSOR_ARCHITECTURE%" == "x86" goto :x86
echo Restarting using Wow64 filesystem redirection: %0 %*
%SystemRoot%\SysWOW64\cmd.exe /c %0 %*
exit /b %ERRORLEVEL%
:x86
rem Rest of script follows...
Обратите внимание, что неправильный взлом может привести к бесконечному появлению cmd.exe
процессы. Вот почему я использовал goto
и ярлык вместо if ... ( ... )
: параметры командной строки могут содержать круглые скобки и if ... ( ... )
выполняет жадный поиск первой закрывающей скобки.