【WPF】パソコンにインストールされてるソフトをチェックしてみる
おはようございます。
業務アプリなんかでは、
データベースなど本体の他にアプリケーションの動作に必要なものがあったりします。
そういったものがインストールされているかどうか、プログラムでチェックする処理を書いてみました。
プログラムは一応前回のものを流用します。
スポンサーリンク
クラスの追加
アプリケーション情報クラス
ソリューション・エクスプローラーからプロジェクトを右クリックし、「追加」>「クラス」を選択します。
名前を入力して「追加」ボタンをクリックします。
プログラムは次のようにします。
UninstallApp.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WpfApp1 { /// <summary> /// アンインストールアプリケーション. /// </summary> public class UninstallApp { /// <summary> /// 表示名 /// </summary> public String DisplayName { set; get; } /// <summary> /// 表示バージョン /// </summary> public String DisplayVersion { set; get; } /// <summary> /// インストール日次 /// </summary> public String InstallDate { set; get; } /// <summary> /// 発行元 /// </summary> public String Publisher { set; get; } } }
レジストリチェッククラス
先程と同様、ソリューション・エクスプローラーからクラスを追加します。
RegistryUtil.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Win32; namespace WpfApp1 { public static class RegistryUtil { /// <summary> /// 対象のアプリケーションがインストールされているかどうかを返します. /// </summary> /// <param name="appName"></param> /// <returns></returns> public static Boolean isInstalled(String appName) { List<UninstallApp> list = getUninstallAppList(); var result = list.Where(x => x.DisplayName.IndexOf(appName) > -1).ToList(); if (result.Count > 0) { return true; } return false; } /// <summary> /// アンインストールアプリケーションの一覧を作成します. /// </summary> /// <returns></returns> public static List<UninstallApp> getUninstallAppList() { String uninstallPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(uninstallPath, false); List<UninstallApp> list = new List<UninstallApp>(); if (regKey != null) { foreach (string subKey in regKey.GetSubKeyNames()) { UninstallApp ap = new UninstallApp(); RegistryKey appkey = Registry.LocalMachine.OpenSubKey(uninstallPath + "\\" + subKey, false); // 表示名 String displayName = GetValue(appkey, "DisplayName"); ap.DisplayName = displayName != "" ? displayName : subKey; // バージョン ap.DisplayVersion = GetValue(appkey, "DisplayVersion"); // インストール日時 ap.InstallDate = GetValue(appkey, "InstallDate"); // 発行元 ap.Publisher = GetValue(appkey, "Publisher"); list.Add(ap); } } return list; } /// <summary> /// レジストリキーから指定した名前のデータを取得します. /// </summary> /// <param name="key"></param> /// <param name="name"></param> /// <returns></returns> private static String GetValue(RegistryKey key, String name) { var value = key.GetValue(name); if (value != null) { return value.ToString(); } return ""; } } }
プログラムの修正
起動時にチェックするように修正
public MainWindow() { InitializeComponent(); if (!RegistryUtil.isInstalled("Oracle")) { MessageBox.Show("Oracleがインストールされていません。", "起動時チェック"); this.Close(); } . . . 省略 }
起動してみる
起動時にチェックが実施され、アラートメッセージが表示されました。
まとめ
レジストリを参照するので、他にもいろいろと応用がききそうですね。
また、必要なアプリがインストールされていない場合に、
インストーラーを起動するなんてこともできるかもしれませんね。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません