VB6アプリの延命を試みる

VBAdvent Calendarという企画のもと、久しぶりにVB6アプリと触れ合った小話でも。

よくお客様からWindowsXPで動作していたVB6のアプリケーションをWindows7の環境でも動作させたいというお話をいただきます。
まともに載せかえすると、8割方動作しません。
互換性モードを使ってもかなりの割合で失敗します。
ですが、アプリケーションの仮想化という技術があります。
いわゆる、ThinApp(VMware)やApp-V(Microsoft)という技術です。
App-Vの場合、パッケージング後に動作させるOSで物理インストール時に動作保証をしているものしかパッケージングできないため、今回のパターンでは利用できません。
よって、今回はThinAppを使ってのパッケージングを簡単にご説明。
ThinAppは、アプリケーションとその動作環境(レジストリやDLLなど)をパッケージングしてVOS上で動かす技術です。
パッケージングされたアプリケーションは、直接動作するOSの環境を利用しません。
ただし、Win32APIを使っている場合はVOSでエミュレートされたWin32APIに読み替えて動作します。
リモートDCOM(流行しなかったので、利用しているケースはほとんどないと思います。)も使えません。
多くのVB6でつくられた業務アプリは、ODBCやADOといったコンポーネント経由でDBにアクセスして、結果をどうこうします。
また、VB6のランタイムを同時に配布するためにディストーションウィザードやVisual Studio Installer、Install Shieldを使ってインストールする場合が多いです。
むかし、インストーラをがりがり固めていた頃の話を書いた気がしますが、遠い昔。
Dependency Walkerで依存関係を細かく見てデバッグしたりと地道な作業でした。
話がそれましたが。
Thin Appでパッケージングする場合、基本の手順はアプリのインストール前後のファイルやレジストリの差分をセットアップキャプチャで取得して固めます。
固めるときに、追加するレジストリ情報とか、実際に動作させる環境の物理OSとの環境の分離モードを設定するという手順をおこないます。
このやり方を行うと、プラットフォームの変更に伴った”機能追加のない”エンハンス作業が減るので、開発者にとってもユーザにとってもとてもメリットの出るものになります。
だって、動作環境を変更するためだけに、VB6で書かれた膨大なソースをVB.netや他のプラットフォームに翻訳するのってばかばかしいですよね。
その後ろ向きな工数があれば、新しい開発ができたりといった建設的な作業に費やすことができます。
こんなVB6との決別も将来的なVB.netとのお付き合いのために必要なのかも知れませんね。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中