1.概要
インストーラーを使ってインストールされたアプリケーションは
レジストリにその情報が登録されています。
【コントロールパネル】にある【プログラムと機能】の一覧にあるアプリケーションのバージョン情報を
C#.netから取得することでアプリケーションのバージョン管理に役立つかと思います。
開発環境:visual studio 2015
開発言語:C#.net
2.レジストリ
どこにアプリケーションの情報が登録されているのかというと2パターンに分かれます。
【32bit環境、または64bit環境で64bitアプリケーションのインストールした場合】
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
【64bit環境で32bitアプリケーションをインストールした場合】
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
上記に登録されています。
3.原理
どうやってバージョン情報を取得するかというと
レジストリキーの【DisplayName】を取得し
【DisplayName】とバージョンが知りたいアプリケーション名が一致したら
レジストリキーの【DisplayVersion】をさらに取得します。
レジストリから値を取得するには【Microsoft.Win32.RegistryKey】クラスを使用します。
4.スクリプト
任意のフォームアプリケーションプロジェクトを作成し
バージョンを取得したいアプリケーションを設定します。
今回は
【Microsoft Visual Studio Professional 2015 - 日本語】
にしています。
結果はメッセージボックスに出力されます。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace getAppVersion { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string versionInfo = getAppVersiont("Microsoft Visual Studio Professional 2015 - 日本語"); MessageBox.Show(versionInfo); } private string getAppVersiont(string appName) { string ver = ""; string wkKeyName = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; Microsoft.Win32.RegistryKey wkRegKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(wkKeyName, false); if (wkRegKey != null) { foreach (string subKey in wkRegKey.GetSubKeyNames()) { Microsoft.Win32.RegistryKey appkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(wkKeyName + "\\" + subKey, false); if (appkey.GetValue("DisplayName") != null) { if (appName == appkey.GetValue("DisplayName").ToString()) { if (appkey.GetValue("DisplayVersion") != null) { ver = appkey.GetValue("DisplayVersion").ToString(); }else { ver = "バージョン情報が取得出来ませんでした。"; } break; } } } } return ver; } } }
5.結果
バージョン情報が出力されました。