最初の、そして最も重要なことはなく、すべてのアプリケーションがシステムのどこかに自分のバージョンを保存しないということであるを構築する方法を知っておく必要があります。正直言って、彼らのほんの数人だけがそれをしています。あなたが見なければならない場所は、Windowsレジストリです。インストールされたアプリケーションのほとんどは、次の場所に彼らのインストールデータを置く: - :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
はしかし、それは簡単ではありません、64ビットのWindows上で、32ビット(x86の)アプリケーションは、ある別のキー、に彼らのインストールデータを保存します
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
これらのキーには多くのキーがあり、そのうちのいくつかはGoogle Chrome
のような「わかりやすい」名前を持っており、そのうちのいくつかは{63E5CDBF-8214-4F03-84F8-CD3CE48639AD}
などの名前を持っています。これらのキーをすべて解析してアプリケーション名を探し始める必要があります。通常はDisplayName
の値がありますが、必ずしもそうではありません。アプリケーションのバージョンは通常DisplayVersion
の値ですが、一部のインストーラではInno Setup: Setup Version
などの別の値を使用しています...アプリケーションのバージョンに名前が書き込まれているものがあるため、アプリケーションのバージョンがすでにDisplayName
の値である可能性があります。
注:これらのレジストリキーと値をすべて解析し、正しい値を「選択」するのは容易ではありません。すべてのインストーラがアプリケーションデータをこれらのキーに保存するわけではありません。そのうちのいくつかはアプリケーションのバージョンなどを保存しません。ただし、アプリケーションがこれらのレジストリキーを使用するのは通常です。 [ソース:StackOverflow: Detecting installed programs via registry、自分のレジストリを参照]
いいえ、どこに見えるべきか分かったら、C#ですべてプログラムする必要があります。私はあなたのためのアプリケーションを書いていませんが、どのクラスを使うべきか、どのようにすればいいのか教えてくれます。まず、あなたは、これらを必要とする:
using System;
using Microsoft.Win32;
あなたHKEY_LOCAL_MACHINE
に取得するには、このようなRegistryKey
を作成:
RegistryKey baseRegistryKey = Registry.LocalMachine;
今、あなたはサブキーを定義する必要があります。
string subKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
// or "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
今、あなたがする必要がありますサブキーに移動しますので、新しいRegistryKey
を作成してください:
RegistryKey uninstallKey = baseRegistryKey.OpenSubKey(subKey);
今、あなたがそこにいるすべてのサブキースルー行く必要があるので、まず我々はすべてのサブキーの名前を取得:今すぐ
string[] allApplications = uninstallKey.GetSubKeyNames();
あなたは、すべてのサブキー自分スルー一つ一つを行かなければなりません、新しいレジストリキーを作成することによって、(あなたがする必要はありませんが、私はそれをやる):
applicationSubKeyName
あなたが現在チェックしているサブキーの名前です
RegistryKey appKey = baseRegistryKey.OpenSubKey(subKey + "\\" + applicationSubKeyName);
。私はforeach
ステートメントをお勧めします。ただし、C#についての経験がまだ必要ですが、ここではforeach
の使い方については説明しません。
アプリケーションの名前を確認し、目的のアプリケーションの名前と比較してください(すでに述べたように、サブキー名に頼ることはできません。たとえば、{63E5CDBF-8214-4F03-84F8-CD3CE48639AD}
と呼ばれるので、ここで名前を確認する必要があります) :それは正しいアプリケーションはなら
string appName = (string)appKey.GetValue("DisplayName");
を見つけ、バージョン(あなたがそれを自分でチェックする必要があります):
string appVersion = (string)appKey.GetValue("DisplayVersion");
ほらを、あなたはバージョンを持っています。少なくともあなたには60〜80%の可能性があります。
覚えておいてください!一部のキーまたは値が存在しない場合、メソッドはnull
を返します。戻り値が毎回nullであるかどうかを確認してください。さもなければ、アプリケーションがクラッシュします。
詳細はどこですか? The Code Project: Read, write and delete from registry with C#
本当に助けてくれることを願っています。あなたが何か他のものを知りたいと思っていて、私があなたの質問を理解できなかったなら、次回はよく聞いてください。 :)
詳細が必要です。どんなツールを使っているのですか、正確に何をしようとしていますか、何を試しましたか? –
私は同意します。この質問は非常にあいまいです。言い換えれば、あなたは話しているのですか? –
「MyApp」という名前を正確にどこに渡しますか?アプリケーション自体で? Windowsの他の部分では?あなたはこの名前をどこに入れますか?いくつかの検索? –