32bitのJP1から64bitでバッチを実行する

たまーに書きたくなるSE系のお仕事ねた。自分のハマりかけた経験をシェアするというよりかは、備忘録のために書いております。

64bitのWindowsサーバにJP1/AJSを32bitインストールしてる場合によくあるんじゃないかという話。例えば32bitのJP1で実行するバッチから64bitのODBCドライバーとか使うとエラーになります。

指定されたDSNには、ドライバーとアプリケーションのアーキテクチャの不一致が含まれています

みたいなエラーメッセージが出て。ぱっと見、なんのこっちゃですよね。すぐにネットで検索できる環境なら問題解決も早いでしょうが、こないだはネットが使えない場所だったのでかなり苦労しましたよ(^_^)。僕そんなJP1とか詳しくないですし。

どうするかっていうと、64bit版のcmdやcscriptを強引に使うのです。

WOW64リダイレクト


わう!(^O^)/。…。WOW64リダイレクトという64bit版Windowsの仕様があります。

32bitアプリからだとsystem32フォルダ直下のcmdやらを使っているつもりが、裏で勝手にsysWOW64フォルダ以下のcmdやらにリダイレクトされてしまう仕様です。

明示的にc:\windows\system32\cmd.exeとか書いてもダメです。

勝手にc:\windows\sysWOW64\cmd.exeにリダイレクトされます。




リダイレクトされない書き方


リダイレクトされずに64bit版cmdを使う魔法の(^_^)書き方はこうです。

c:\windows\sysnative\cmd.exe

もちろんc:\windows部分はシステムルートパスで。cmd.exe以外も同様です。

先ほどの例だと、DB使った処理をvbscriptで書いてJP1から起動するbatで使う場合

cscript hoge.vbs

ではだめで

c:\windows\sysnative\cscript.exe hoge.vbs

とすれば、めでたく64bit実行となり、ODBCドライバーも素直に働いてくれます。

どうでしょう?こんなの基本的な知識で、知っていたら悩むこともないのでしょうが、意外とまわりでも知らない人が多かったので書いてみました。

ではまた!
(当ブログは技術系ブログではないので、こういう話はめったにありませんので…)

0 件のコメント :

コメントを投稿