web-dev-qa-db-ja.com

Windows OS 32ビットで%PROGRAMFILES(x86)%を使用する

環境変数%PROGRAMFILES(x86)%を32ビットのWindows OS(つまり、Windows XP、Vistaなどの古いバージョンのWindows)で使用するとどうなりますか?

私はそれが単に解決されることを望んでいます:C:/Program Files。これは起こりますか?

31
sazr

これに 環境変数%PROGRAMFILES(x86)%は、64ビットシステムでのみ使用可能です。

ただし、64ビットシステムで_%PROGRAMFILES%_を使用する場合、結果は、環境変数を要求するプロセスが32ビットか64ビットかによって異なります。

したがって、64ビットシステム上の64ビットプロセスから_C:\Program Files_を取得し、64ビットシステム上の32ビットプロセスからC:\Program Files (x86)を取得し、32- 32ビットシステムのビットプロセスでは、_C:\Program Files_が返されます。

これで解決しない場合は、元の質問をコメントしたり編集したりして、何をしようとしているのか具体的にすることができます。現在のところ、あなたの質問に対する答えは「いいえ」です。

44
Roger Rowland

キース・ヒル この質問に答えました ここ 、要約:

${env:ProgramFiles(x86)}は32ビットマシンでは定義されていません

常にx86ディレクトリとの間でデータをやり取りしたい場合は、このコードを使用してファイルパスを決定できます。

$file = "\file"
if ("${Env:ProgramFiles(x86)}")
{
    $fullPath = "${Env:ProgramFiles(x86)}\$file"
}
else
{
    $fullPath = "${Env:ProgramFiles}\$file"
}
3
agabrys

%ProgramFiles(x86)%はWindows 7 32ビットでは定義されていないので、私が思いついた回避策は次のとおりです。

SET MyPath="%ProgramFiles(x86)%\MyFolder\MyApplication.exe"
rem workaround for Windows7 32 bit:
IF NOT DEFINED ProgramFiles(x86) SET MyPath="%PROGRAMFILES%\MyFolder\MyApplication.exe"

使用例:インストールされているバッチファイルからアプリケーションを呼び出したい:

  • windows 7 32ビットのC:\ Program Files\MyFolder\MyApplication.exe
  • windows 7 64ビットのC:\ Program Files(x86)\ MyFolder\MyApplication.exe

こちらです %MyPath%は常に正しいパスを指します。

2
uceumern