BETA

【WPF】パソコンにインストールされてるソフトをチェックしてみる

投稿日:2019-07-24
最終更新:2019-07-24

業務アプリなんかでは、
データベースなど本体の他にアプリケーションの動作に必要なものがあったりします。

そういったものがインストールされているかどうか、プログラムでチェックする処理を書いてみました。

プログラムは一応前回のものを流用します。
【WPF】chm ヘルプファイルを表示する

クラスの追加

アプリケーション情報クラス

ソリューション・エクスプローラーからプロジェクトを右クリックし、「追加」>「クラス」を選択します。

名前を入力して「追加」ボタンをクリックします。

プログラムは次のようにします。

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();  
                }  

                .  
                .  
                .  
                省略  
            }  

起動してみる

起動時にチェックが実施され、アラートメッセージが表示されました。

まとめ

レジストリを参照するので、他にもいろいろと応用がききそうですね。

また、必要なアプリがインストールされていない場合に、
インストーラーを起動するなんてこともできるかもしれませんね。

ではでは。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@doraxdoraの技術ブログ 主に Java, C#, Python, Javascript の記事を載せていく予定。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう