業務アプリなんかでは、
データベースなど本体の他にアプリケーションの動作に必要なものがあったりします。
そういったものがインストールされているかどうか、プログラムでチェックする処理を書いてみました。
プログラムは一応前回のものを流用します。
【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();
}
.
.
.
省略
}
起動時にチェックが実施され、アラートメッセージが表示されました。
レジストリを参照するので、他にもいろいろと応用がききそうですね。
また、必要なアプリがインストールされていない場合に、
インストーラーを起動するなんてこともできるかもしれませんね。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント