32bit VBなアプリを64bit環境で動かなかったけど動かしたい(動かした) [プログラミング]
前回に、WindowsXPのリプレイスがやすやすとできそうにない、という話をした。そのおまけに、64bitサーバで32bitアプリが動かないという。普通はWOW64で動くはずなのにね~ということ。
二つのパターンがあって、ほぼ同じ挙動を示していたんだけど、どっちも動かない理由が違っていた。
VBScriptの場合は、そのままダブルクリックで実行しようとすると、CreateObjectで転んでいた。
VBで作ったEXEの場合も、64bitサーバOSで動かそうとすると、同様にCreateObjectできていなかった。
結局、前者の方は、スクリプトをダブルクリックで実行すると、64bitのインタプリタが動いてしまうらしく、そこで問題が出ていたらしい。WOW64なcscriptというコマンドラインアプリに、スクリプトファイルを引数で渡して実行すると、晴れて32bitモードで実行されてきちんと動く。そうじゃないと32bitのDLLが読めないということでした。そんなわけで、CreateObjectできないものになっていたらしい。
後者のVBの32bitアプリのほうは、ただ単にOSのパスが通ってないところに、DLLを置いていたってだけらしい。彼はregsvr32とか使っていたけど、多分パスが通ってればDLLを手動でコピーしたりしても動くはず。まぁサーバOSで64bitっていうことで、いろいろ勝手が違うかもしれないし、面倒なので細かくは調べない。ググればすぐ出てくるはずさぁ。
同じようなエラーだから、同じように攻めていくとはまりそうだが、今回はそんなに難解な問題じゃなくて良かった。きちんとできなかったわけを理解しないと、同様なところではまるから、原因つぶしはしといたほうがいいよとはたぶん言っておいたので、無事に事が解決してよかった。
二つのパターンがあって、ほぼ同じ挙動を示していたんだけど、どっちも動かない理由が違っていた。
VBScriptの場合は、そのままダブルクリックで実行しようとすると、CreateObjectで転んでいた。
VBで作ったEXEの場合も、64bitサーバOSで動かそうとすると、同様にCreateObjectできていなかった。
結局、前者の方は、スクリプトをダブルクリックで実行すると、64bitのインタプリタが動いてしまうらしく、そこで問題が出ていたらしい。WOW64なcscriptというコマンドラインアプリに、スクリプトファイルを引数で渡して実行すると、晴れて32bitモードで実行されてきちんと動く。そうじゃないと32bitのDLLが読めないということでした。そんなわけで、CreateObjectできないものになっていたらしい。
後者のVBの32bitアプリのほうは、ただ単にOSのパスが通ってないところに、DLLを置いていたってだけらしい。彼はregsvr32とか使っていたけど、多分パスが通ってればDLLを手動でコピーしたりしても動くはず。まぁサーバOSで64bitっていうことで、いろいろ勝手が違うかもしれないし、面倒なので細かくは調べない。ググればすぐ出てくるはずさぁ。
同じようなエラーだから、同じように攻めていくとはまりそうだが、今回はそんなに難解な問題じゃなくて良かった。きちんとできなかったわけを理解しないと、同様なところではまるから、原因つぶしはしといたほうがいいよとはたぶん言っておいたので、無事に事が解決してよかった。
コメント 0