正常に動作する既存のCMDスクリプトがあります。 PROGRAMFILESからアプリを起動します。
"%PROGRAMFILES%\MyApp\app.exe"
マットの正解 に似ています。基本的に、このバージョンでは完全なパスが検証されます。
SET AppExePath="%ProgramFiles(x86)%\MyApp\app.exe"
IF NOT EXIST %AppExePath% SET AppExePath="%ProgramFiles%\MyApp\app.exe"
%AppExePath%
これは私が思いつくことができる最高のものです:
set strProgramFiles=%ProgramFiles%
if exist "%ProgramFiles(x86)%" set strProgramFiles=%ProgramFiles(x86)%
"%strProgramFiles%\MyApp\app.exe"
基本的に、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
もう1つのアプローチは、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
_プロセスが生成される可能性があることに注意してください。そのため、if ... ( ... )
の代わりにgoto
とラベルを使用しました。コマンドラインパラメーターに括弧を含めることができ、if ... ( ... )
は最初の閉じ括弧を貪欲に検索します。