2010/02/09(Tue)x64版Windows上でバッチファイルをx86起動する方法

2010/02/09 1:19 Software::Windows
あるプロジェクトのためWindowsでcwrsyncを使おうと言うことで、rsync.exeを叩くスクリプトをバッチファイルで書いていたのだが、どうもx64 OS上からだと正しく起動しない。
おそらくcygwinに入ってるDLL類が32bit限定で、バッチファイルを普通に起動してしまうとx64なコマンドプロンプトから呼ばれるためだろう。うーむ、WOW64も困ったものだな。

ということで、かなり需要は少なそうだが、その解決法。

方針

方針としては、"x86として起動し直す"ということをやればよいので、実は割と簡単な手法。
問題は「バッチファイルの中から自分のコマンドプロンプトがx64のcmd.exeなのか、x86のcmd.exeなのかを知る方法」である。

で、ちょいとググったらヒットしたので、簡単にかけた。ファイルの先頭にこう書く。
@echo off
if "%PROCESSOR_ARCHITECTURE%" NEQ "x86" (
	C:\Windows\SysWOW64\cmd.exe /C %0
	exit
)
x64なシステムで普通に起動すると%PROCESSOR_ARCHITECTURE%は"AMD64"となり、x86アプリからcmd.exeを読んでやった場合や、SysWOW64内のcmd.exeから呼び出した場合は、"x86"となるので問題ない。

うーむ。使う場面が限られそうだが…、いちお。

参考

x64とx86の環境変数の違い - みちしるべ