【WPF】パソコンにインストールされてるソフトをチェックしてみる
おはようございます。
業務アプリなんかでは、
データベースなど本体の他にアプリケーションの動作に必要なものがあったりします。
そういったものがインストールされているかどうか、プログラムでチェックする処理を書いてみました。
プログラムは一応前回のものを流用します。
スポンサーリンク
クラスの追加
アプリケーション情報クラス
ソリューション・エクスプローラーからプロジェクトを右クリックし、「追加」>「クラス」を選択します。
名前を入力して「追加」ボタンをクリックします。
プログラムは次のようにします。
UninstallApp.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; namespaceWpfApp1 { /// <summary> /// アンインストールアプリケーション. /// </summary> publicclassUninstallApp { /// <summary> /// 表示名 /// </summary> publicStringDisplayName{set;get;} /// <summary> /// 表示バージョン /// </summary> publicStringDisplayVersion{set;get;} /// <summary> /// インストール日次 /// </summary> publicStringInstallDate{set;get;} /// <summary> /// 発行元 /// </summary> publicStringPublisher{set;get;} } } |
レジストリチェッククラス
先程と同様、ソリューション・エクスプローラーからクラスを追加します。
RegistryUtil.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingMicrosoft.Win32; namespaceWpfApp1 { publicstaticclassRegistryUtil { /// <summary> /// 対象のアプリケーションがインストールされているかどうかを返します. /// </summary> /// <param name="appName"></param> /// <returns></returns> publicstaticBoolean isInstalled(StringappName) { List<UninstallApp>list=getUninstallAppList(); varresult=list.Where(x=>x.DisplayName.IndexOf(appName)>-1).ToList(); if(result.Count>0) { returntrue; } returnfalse; } /// <summary> /// アンインストールアプリケーションの一覧を作成します. /// </summary> /// <returns></returns> publicstaticList<UninstallApp>getUninstallAppList() { StringuninstallPath="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; RegistryKey regKey=Microsoft.Win32.Registry.LocalMachine.OpenSubKey(uninstallPath,false); List<UninstallApp>list=newList<UninstallApp>(); if(regKey!=null) { foreach(stringsubKey inregKey.GetSubKeyNames()) { UninstallApp ap=newUninstallApp(); RegistryKey appkey=Registry.LocalMachine.OpenSubKey(uninstallPath+"\\"+subKey,false); // 表示名 StringdisplayName=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); } } returnlist; } /// <summary> /// レジストリキーから指定した名前のデータを取得します. /// </summary> /// <param name="key"></param> /// <param name="name"></param> /// <returns></returns> privatestaticStringGetValue(RegistryKey key,Stringname) { varvalue=key.GetValue(name); if(value!=null) { returnvalue.ToString(); } return""; } } } |
プログラムの修正
起動時にチェックするように修正
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | publicMainWindow() { InitializeComponent(); if(!RegistryUtil.isInstalled("Oracle")) { MessageBox.Show("Oracleがインストールされていません。","起動時チェック"); this.Close(); } . . . 省略 } |
起動してみる
起動時にチェックが実施され、アラートメッセージが表示されました。
まとめ
レジストリを参照するので、他にもいろいろと応用がききそうですね。
また、必要なアプリがインストールされていない場合に、
インストーラーを起動するなんてこともできるかもしれませんね。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません