特集
VB6アプリのWindows Vista対応(前編)

VB6アプリをVistaで動かすための基礎知識

codeseek 衣川 朋宏
2008/01/08
Page1 Page2

2. VistaへのVB6アプリの導入

 次に、VB6アプリを導入する際の問題について見てみよう。

上書きインストールの問題

 まず、「1. VB6のサポート期限の問題」の項で言及したとおり、Vistaに同梱されているコンポーネントと、そうでないものがある。前者については上書きしてはならず、後者についてはきちんと配布しなければいけない。従って、独自の配布ツールなどで「無条件に上書き」などしている場合には、(上書きすべきかどうかを正しく判定するように)修正しなければいけない。

 逆にVista上で独自のインストーラを作成した場合も同じで、Vista用に作成されたランタイム・ライブラリを、XPに上書きインストールするといったことは避けなければいけない。

UACの壁

 同様に避けて通れないのが、UAC(ユーザー・アカウント制御)である(UACの概要については、「Windows Server Insider:管理者権限での実行を制限するユーザー・アカウント制御UAC」をご参照いただきたい)。

 インストーラがデジタル証明書(コードサイニング証明書)によって署名されていない場合や、署名されていてもそれが自ら作成した証明書(いわゆるオレオレ証明書)の場合、インストーラは「黄色」のダイアログを表示する。

「黄色」のダイアログ
インストーラがデジタル証明書によって署名されていない場合や、署名されていてもそれが自ら作成した証明書の場合、インストーラの実行時にはこのようなダイアログが表示される。

 このダイアログで「どう対処すべきか(許可すべきどうか)」という情報を、エンド・ユーザーへ周知させるのが、(UACに関する)課題として考えられる。

 また、InstallShieldやWindows Installerなどの一般的なインストーラではなく、独自に作成した配布ツールをインストーラとして利用している場合、Vistaがそれを「インストーラ」ではなく「通常のプログラム」として認識してしまう場合がある。この場合、権限が(インストール時に必要な管理者権限に)昇格されないので、配布に失敗する可能性がある。

 これを防ぐために、独自の配布ツールを「管理者として実行」させる方法もある。次の画面を見てほしい。

「管理者として実行」させる方法
独自の配布ツール(.exeファイル)を右クリックしてコンテキスト・メニューを表示し、[管理者として実行]を選択する。
  独自の配布ツールが通常どおり実行される。
  独自の配布ツールが管理者として実行される。

 を選択して、独自の配布ツール(.exeファイル)を「管理者として実行」するのである。ただし、この操作をすべてのクライアント上で行うのが「現実的かどうか」は一考の余地があるうえ、エンド・ユーザーに「困ったら『管理者として実行』」と思わせてしまうのも、セキュリティ上の問題があるだろう。

ファイル配置の壁

 VB6アプリの配置先は「%ProgramFiles%(通常は「C:\Program Files」として展開される)」の下であるケースが多いと思われるが、ここに配置しようとする際にも、UACが壁として立ちはだかる。配布プログラムの実行権限が管理者レベルに昇格していない場合、フォルダやファイルの作成が拒否されるためだ。

 例えばコマンド・プロンプトを使用して実験してみると、以下のようにフォルダやファイルの作成に失敗することが分かる。

C:\Program Files>mkdir SomeDeploy
アクセスが拒否されました
C:\Program Files>cd OtherDeploy
C:\Program Files\OtherDeploy>copy someFile.txt otherFile.txt
アクセスが拒否されました
        0 個のファイルがコピーされました
コマンド・プロンプトを使用したファイル配置

 また「Windows Server Insider:管理者権限での実行を制限するユーザー・アカウント制御UAC(後編)」にあるように、プログラムからファイルの出力を行う際に管理者権限に昇格されていないと、仮想化されたフォルダにリダイレクトされて出力(インストール)される。同じログイン・ユーザーがアプリケーションを操作する場合には問題は少ないと考えられるが、複数のアカウントで使用する場合、あるいはユーザー・サポートの場面*2で問題になると考えられる。

*2 ここで述べる「ユーザー・サポートの場面」とは、以下のようなシナリオを想定している。

・「プログラム・フォルダ内にあるxxxというファイルを開いて……」とサポート・ドキュメントにあるが、実体は仮想化されているので、そこにはファイルが存在しない。
・ユーザーが自分でフォルダを確認したとき、そこにファイルはないので、「本当に書き込まれたのか?」と不安になる。

レジストリ登録の壁

 VB6アプリの配布の際には、使用する.DLL/.OCXファイルをレジストリに登録する作業が必要である。このこと自体はVistaになっても変わりない。使用するコマンドも“RegSvr32”で同様だ。

 しかしながら、このRegSvr32を使用してレジストリ登録を行うには、管理者権限が必要である。権限のない状態で実行すると、下のようなエラーを通知するダイアログが表示される。

通常のレジストリ登録(RegSvr32実行)で表示されるエラーを通知するダイアログ

 しかも、サイレント・モード(「/s」オプション付き)でRegSvr32を呼び出したときには、エラーであってもこのダイアログは表示されない。そのため、VB6アプリを実行してみて初めてレジストリ登録の失敗に気付くという事態も予想される。

 管理者として実行すれば、下の画面のように、きちんと登録される。

管理者としてのレジストリ登録(RegSvr32実行)で表示される成功を通知するダイアログ

 つまり、RegSvr32を介してレジストリ登録を行う場合には、「管理者として実行」は必須である。

OSのバージョン・チェックの壁

 アプリケーションによっては、インストールや起動の際にOSのバージョン・チェックを行う場合がある。これについても問題となり得る。

 各OSのバージョン番号の一覧については、「.NET TIPS:Windows OSのバージョンを判別するには?【Vista対応】」を参照してほしい。このTIPSで示されているように、VistaからはVersion.Majorプロパティが「6」になっている点に注目していただきたい。

 もちろんこのTIPSは.NETでの話であるが、VB6でバージョン番号を取得する際に一般的に使用されるWindows APIのGetVersionEx API(詳しい使用方法は割愛)を使ってもメジャー・バージョン番号は「6」である。そのため、以下のようなチェックを行っている場合には問題となる。

If MajorVersion <> 5 Then
  MsgBox("Windows 2000以降のOSで実行してください", vbOkOnly or vbCritical )
  Exit Sub
End If
OSのバージョン・チェックを行うVB6のソース・コード

 このコードの場合、Vistaは「Windows 2000以降」のOSであるにもかかわらず、使用不能と判断されてしまう。このようなコードが配布ツール(やVB6アプリ)に実装されている場合には、それを修正して対応するしか選択肢はない。

 以上、まずはサポート期限の問題とインストール時に発生するいくつかの問題に対処する方法を紹介した。次回後編では、Vista対応のためのVB6アプリの修正方法と運用時の注意点、VB6の今後について説明する。End of Article


 INDEX
  [特集]
  VB6アプリのWindows Vista対応(前編)
  VB6アプリをVistaで動かすための基礎知識
    1.VB6のサポート期限の問題
  2.VistaへのVB6アプリの導入
 
  VB6アプリのWindows Vista対応(後編)
  Vista上で動作するVB6アプリの作り方
    1.Vista上でのVB6アプリの運用・修正編(UAC関連)
    2.Vista上でのVB6アプリの運用・修正編(フォント関連)
    3.VB6の今後


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH