32bit windowsでは、プログラムのインストール先はたいてい"C:Program Files"ですが、64bit windowsでは、64bitプログラムは"C:Program Files"に、32bitプログラムは"C:Program Files(x86)"に分けてインストールするのがお約束になっています。
この"Program Files"ディレクトリを参照する環境変数として%PROGRAMFILES%というのがあるんですが、この環境変数は呼び出し元プログラムが32bitか64bitかによって変わるようです。
C:\WORK>\Windows\SysWOW64\cmd.exe Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\WORK>echo %PROGRAMFILES% C:\Program Files (x86) C:\WORK>exit C:\WORK>\Windows\System32\cmd.exe Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\WORK>echo %PROGRAMFILES% C:\Program Files
一瞬逆に思えるけど、System32の下にあるのが64bit版で、SysWOW64の下にあるのが、32bit版のcmd.exeです。
インストーラ無しで配布されているプログラムをインストールする(chefの)recipeで、インストール先として
"#{ENV['PROGRAMFILES']}\\hoge"
みたいなのを指定してたら、git-bashから入れるとProgram Files(x86)に入るし、コマンドプロンプトから入れるとProgram Filesに入るし大混乱になりました・・・orz
一応、こんな感じで回避してますが、そもそもインストール先を選択する時に%PROGRAMFILES%を使うのは不適切だってことですね。
if kernel['machine'] =~ /x86_64/ default['install_to'] = "#{ENV['PROGRAMW6432']}" else default['install_to'] = "#{ENV['PROGRAMFILES']}" end