2019-07-24に投稿

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

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

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

プログラムは一応前回のものを流用します。
【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();
                }

                .
                .
                .
                省略
            }


 

起動してみる

アラートメッセージ

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

まとめ

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

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

ではでは。

Originally published at www.doraxdora.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

doraxdora

IT関係の仕事をしています/1985年生まれの東京在住/便利なサービスやツール漁りや料理などが好き/2017年~ブログやってます/自分でサービスとか作ってリリースしたい/何かありましたらお気軽にDMどうぞ

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント