私はすでに経験しました:
アプリケーションが既にインストールされているかどうかを確認する
NSIS でプログラムが既にインストールされているかどうかを検出する
http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs
私の質問はもう少し深く、もう少し一般的です。
それで、あなたが私の問題を理解しているように、「特定のアプリケーション」がユーザーのマシンに既にインストールされているかどうかを確認したいのですか? Advanced Installerを使用してインストーラーを生成しています。
最初のいくつかの質問:
- とは
Upgrade Code
? 高度なインストーラーにはオプション、製品バージョンがあります (アップグレード コードで識別) - とは
Product Code
? 高度なインストーラーの製品バージョン (製品コードで識別) - コンポーネントがインストールされています:
GUID
。GUID とは何ですか?
上記の 3 つすべてには、次のような値があります。
{49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3} これらの値が何であるかはわかりませんが、コンピューターはこの種の奇妙な ID を使用してソフトウェアを認識しているようです。
私の必要なアプリケーションは
- MySQL データベース
- MySQL .NET コネクタ
私が発見した1つの事実は、アップグレードコードと製品コードが「msiインストーラー」から抽出できることです。したがって、これらの値をインストーラーとレジストリから抽出しました。
MySQL サーバー
Installer = mysql-5.1.43-win32.msi
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {0ECED7D8-FF53-4DC9-958E-C2177F528DE4}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0ECED7D8-FF53-4DC9-958E-C2177F528DE4}
Installer = mysql-5.1.46-win32.msi
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {EA8FDE5A-2B33-4EDD-B7E7-8D179DF731A5}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{EA8FDE5A-2B33-4EDD-B7E7-8D179DF731A5}
Installer = mysql-essential-5.1.46-win32.msi
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {AD33AF2C-6485-4106-B012-1D9CDC88A454}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{AD33AF2C-6485-4106-B012-1D9CDC88A454}
Installer = mysql-essential-5.0.89-win32.msi
Upgrade Code = {49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3}
Product Code = {9A4DA7EF-A7B9-4282-90AD-10976AA24E69}
GUID (for component Installed) = ????
Uninstall Path = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9A4DA7EF-A7B9-4282-90AD-10976AA24E69}
上記のデータからの観察:
UpgradeCode
ソフトウェアのバージョンは一定であり、バージョンに関係ありません。しかし驚くべきことに、レジストリには次の値を持つ単一のエントリはありません。UpgradeCode
ProductCode
バージョン固有であり、MSI によって内部的に使用されているため、実際には合理的です。MSI では、異なるバージョンのアプリケーションを並べてインストールできます。- GUID の検索方法がわかりません。
MySQL ADO .NET ドライバー
Installer = mysql.data.5.2.5.msi
Upgrade Code = ---
Product Code = {5FD88490-011C-4DF1-B886-F298D955171B}
GUID (for component Installed) = ????
Installer = mysql.data.6.2.2.msi
Upgrade Code = ---
Product Code = {5FD88490-011C-4DF1-B886-F298D955171B}
GUID (for component Installed) = ????
UninstallPath =HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{5FD88490-011C-4DF1-B886-F298D955171B}
Installer = mysql.data.6.2.3.msi
Upgrade Code = ---
Product Code = {5FD88490-011C-4DF1-B886-F298D955171B}
GUID (for component Installed) = ????
上記のデータからの観察:
- 驚くべきことに、mysql.data.*.msi のインストーラーから UpgradeCode を見つけることができませんでした。なぜだろう?これは私の上記の観察と矛盾します。
ProductCode
ここでは、すべての異なるバージョンで同じです。これもまた、私の上記の観察と矛盾します。- GUIDを見つける方法はまだわかりません。
今、
- これら
ProductCode
&UpgradeCode
&は正確には何ですかGUID
。 - どれが何を表している?
- 上記の観察が矛盾しているのはなぜですか?
- バージョンは気にしません。アプリケーション名に依存したくない場合は、MySQL ドライバーと MySQL ADO .NET を確認する方法を教えてください。
- .NET アセンブリの場合、検出は簡単になりますか? ではどうすれば?展開したファイルと一緒にアセンブリを出荷したくありません。