ClickOnce アプリケーションはユーザーごとにインストールされるため、レジストリのパスをたどることで、アンインストール情報 (ウィザードが表示するアプリ) を見つけることができます。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\5f7eb300e2ea4ebf
この「アンインストール」には一意のハッシュ サブキーがあります。アプリを見つけるには、これらのキーを反復処理し、たとえば次のように DisplayName でフィルター処理できます。
private RegistryKey GetUninstallRegistryKeyByProductName(string productName)
{
var subKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall");
if (subKey == null)
return null;
foreach (var name in subKey.GetSubKeyNames())
{
var application = subKey.OpenSubKey(name, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.QueryValues | RegistryRights.ReadKey | RegistryRights.SetValue);
if (application == null)
continue;
foreach (var appKey in application.GetValueNames().Where(appKey => appKey.Equals("DisplayName")))
{
if (application.GetValue(appKey).Equals(productName))
return application;
break;
}
}
return null;
}
このメソッドは RegistryKey を返し、「DisplayVersion」キー値を取得できます。
var key = GetUninstallRegistryKeyByProductName("myApp");
var version = key.GetValue("DisplayVersion");
アップデート
インストール日については、レジストリ キーの最終書き込み時刻を取得してみてください ("DisplayVersion" の最終書き込み時刻を取得する必要があります)。これを取得するためのマネージ ラッパーがないように見えるので、P/Invoke を使用します。RegQueryInfoKey を呼び出す必要があります。