Windows95からWindows7へのアプリ移植

朝山です。今日はVBことVisual Basicについて思ったことをつれづれと。

本日某所に納品作業で出かけて行ったのですが、その仕事というのがWindows95で稼働しているVB5で作成したローカルアプリケーションを、Windows7でも動くようにするという仕事でした。Windows95はその名の通り1995年に発売されて、Windows98が出る1998年ごろまでに導入されたものなので、だいたい15年前くらい前に開発されたアプリということになります。さすがにWindows7への移植はうまくいくのかどうかよくわからないと思ったのですが、多少のリスクは覚悟でチャレンジしてみました。

VBのアプリを動作させるためには、ランタイムと言われる部品が必要になります。VBは実行ファイル(EXE)だけでは動かないのです。そのようなわけで、まずはWindows7で動くランタイムがあるかどうかを調べるところからスタートすることになります。(もちろん、そのあたりの調査は見積時にしてますw)

VB5のランタイムはさすがにWindows7では動くのかどうか情報がありません。しかし、ありがたいことにVB6であればWindows7でもランタイムの動作は保障されているようです。しかもOSにもともと同梱されているとのこと! 以下にVBのランタイムのサポート状況が記載されていますね。やったーMicrosoftバンザイ。
http://msdn.microsoft.com/ja-jp/vbasic/cc707268

VB5→VB6の移植はその昔何度もやったことがあるんですが、基本的にはコンパイルをやり直せばそのまま動いてしまいます。ちょっとした調整が必要になることもあったと思うのですが、ずいぶん昔のことなので覚えていません。今回の件もコンパイルだけは何もコードを変更しなくても通りました。そして、コンパイルしたらWindows7でさくっと起動しました。

それからすべての挙動のテストを開始したのですが、肝心なところが動かないということが分かりました。無線のハンディーターミナルとソケット通信をしているのですが、その部分が動くとアプリがフリーズしてしまうのです。中身を調べてみますと、その通信部分は独自のOCXが利用されていました。VB6にはMSWinsck.OCXという純正のソケット通信用の部品があるので、それを使っているものだとばかり思っていました。VB5の時代にはMSWinsck.OCXはなかったのかもしれません。その独自OCXのソースファイルがないので修正することもできません。中身で何をやっているかはわからないのですが、ハンディターミナル側のプログラムから推測するに、特別なことは何もやっていないようでしたので、MSWinsck.OCXを利用するように作り直しました。

上記のWinsockのMSWINSCK.OCXやよく使う部品をあつめたMSCOMCTL.OCXといった、MS純正の部品はWindows7にデフォルトインストールされているランタイムには含まれていないようです。このあたりはランタイムに含まれているのかと思い込んでいました。これらのOCXは自分でインストールする必要があります。VISTA以降はUAC(ユーザアカウントコントロール)がうるさいですね。今回は納めるPCは1台だけでしたので、インストーラーは作らず、1回だけ管理者モードで実行してOCXが使えるようにしました。

Vectorとかでは、この手のVBの主要OCXをインストールするためのインストーラーが配布されているようです。MSのサイトにないかなと探したのですが、これらのOCXがどこでダウンロードできるのか分かりませんでした。Vectorとかに置いてあるということは、ある程度需要があるということなのだと思います。ウチの場合は昔のVisual studioなども取ってありますので大丈夫です。Delphiとかもありますよ。

独自OCX以外にも、もう一つ問題がありました。そのアプリはアプリ終了時にOSをシャットダウンするWIN32APIを呼んでいるのです。Windows95では、何の権限も必要ないのですが、Windows7ではそういうわけにはいきません。権限のことはちょっとややこしかったので、外部コマンドでshutdownを呼ぶということで、この点は逃げました。WIN32APIを直接たたいている部分は要注意箇所ですね。


といった具合で、無事に移植を完了することはできました。一工夫は必要でしたが、想定内に収まっていたと思います。ということで15年前のアプリが、Windows7で動くようになりました。Windows7のサポートは2020年です。まぁ、現在全くサポートなどされていないWindows95で無事に動いているわけですので、このアプリは2020年よりもっと先まで稼働するんだと思います。そうすると25年とか30年とか動くのかもしれません。

Windows7のサポートについて。
http://support.microsoft.com/lifecycle/search/default.aspx?sort=PN&alpha=Windows+7&Filter=FilterNO


MACの台頭で、過小評価されがちなMS Windowsファミリーですが、圧倒的なシェアの理由はこんなところにもあるのではないかと思いました。