3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(VC++).Net Framework がインストールされているかどうかを調べる方法

現在のプロジェクトで作成中のアプリケーションは VB.Net で作っていますが、当然 .Net Framework がインストールされていないと動きません。

Visual Studio のセットアッププロジェクトで、必須コンポーネントととして .Net Framework を含めることができますが、配布ファイルサイズが大きくなってしまいます。必須コンポーネントを開発元のWEBサイトからダウンロードさせることで、配布サイズを小さくすることができます。

しかし、インターネットにつながってないとエラーとなってしまいます。これが、アプリケーション使用対象の素人さんには分かりにくいようで。。

ということで、setup.exe の前に、.Net Framework のインストールの有無と ネットにつながるか(Microsoftのサイト)かどうかをチェックすることとしました。

まず今回は、.Net Framework がインストールされているかどうかを調べる方法です。

これについては、Visual C++ .NET を使用して .NET Framework のバージョンと、コンピュータにインストールされている Service Pack を検出する方法や、Sample code to detect .NET Framework 1.0 and 1.1 and service packsでサンプルコードが公開されてるので、これを使うと簡単です。

ということで、上記サンプルコードをコピペするだけでOKです。

関数化されており、bool 型の戻り値で対象の Framework がインストールされているかどうかわかります。

処理としては、レジストリで確認してるようですね。

しかし、久しぶりに C++ 触ると、本当に書き方忘れますね。

上記のサンプルコードを別ファイルで保存したので、ヘッダファイルを作らないといけないのですが、正直どのヘッダファイルに書いたらいいのか思い出すのに時間がかかります。

(アプリケーション共通のヘッダは、MFCプロジェクトの場合、stdafx.h に定義したらいいようです。stdafx.h に書いたのは、各関数のプロトタイプ宣言と、includeファイルの定義です)

補足ですが、Windows インストーラが入ってるかどうかについては、Windows Installer のバージョンの取得&バージョン一覧でサンプルコードが載せられてました。参考になります。