2010-05-03 5 views
9

Ich habe schon durchgemacht:Was sind ProductCode & UpgradeCode & GUID? Wie kann festgestellt werden, ob eine bestimmte Anwendung/Bibliothek bereits auf dem Benutzercomputer installiert ist?

Check if the application is already installed

Detecting if a program is already installed with NSIS

http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs

Meine Fragen sind wenig mehr in die Tiefe und wenig allgemeiner.

Also, wie Sie mein Problem verstanden habe, möchte ich überprüfen, ob "Certain Applications" bereits auf dem Computer des Benutzers installiert sind? Ich erstelle das Installationsprogramm mit Advanced Installer.

ersten paar Fragen:

  • Was Upgrade Code ist? Das erweiterte Installationsprogramm verfügt über die Option Produktversion (durch Upgrade-Code identifizieren).
  • Was ist Product Code? Advanced Installer Produktversion (durch Produktcode identifizieren)
  • Komponente ist installiert: GUID. Was ist GUID?

Alle oben genannten drei hat Werte wie folgt aus:

{49EB7A6A-1CEF-4A1E-9E89-B9A4993963E3} Ich weiß nicht, was diese Werte sind, aber es scheint, dass Computer-Software erkennt diese Art mit von seltsamer ID.

Meine erforderlichen Anwendungen sind

  1. MySQL DBMS
  2. MySQL .NET Connector

Eine Tatsache, dass ich ein Upgrade-Code & Product Code entdeckt wird, kann aus seiner "msi installer" extrahiert werden. Also, ich extrahierte diese Werte von der Installation & Registrierung.

MySQL Server

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} 

Beobachtung von oben Daten:

  • UpgradeCode einer Software ist konstant & unabhängig von seiner Version ist. Aber überraschenderweise gibt es keinen einzigen Eintrag in der Registrierung mit dem Wert UpgradeCode
  • ist versionsspezifische & es wird von der MSI intern verwendet, die eigentlich sinnvoll ist, weil. Mit MSI können Anwendungen verschiedener Versionen nebeneinander installiert werden.
  • Ich weiß nicht, wie man GUID findet.

MySQL ADO.NET-Treiber

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) = ???? 

Beobachtungen von oben Daten:

  • raschend, konnte es nicht Upgrade von Installateuren mysql.data finden * msi... Ich wundere mich warum? Dies widerspricht meiner obigen Beobachtung.
  • 10 für alle verschiedenen Versionen ist hier gleich. Dies widerspricht wiederum meinen obigen Beobachtungen.
  • Ich weiß immer noch nicht, wie man GUID findet. Jetzt

,

  • Was genau sind diese ProductCode & UpgradeCode & GUID.
  • Was bedeutet was?
  • Warum widersprechen obige Beobachtungen?
  • Ich interessiere mich nicht für Versionen. Ich möchte nicht auf Anwendungsname dann wie überprüfe ich, ob MySQL Treiber & MySQL ADO .NET.
  • Wird die Erkennung einfacher, wenn es sich um .NET-Assemblies handelt? Wie geht es dann? Ich möchte die Assemblys nicht mit meinen bereitgestellten Dateien versenden.

Antwort

12

UpgradeCode bezeichnet ein Produkt mit verschiedenen Versionen.

ProductCode bezeichnet eine Version eines Produkts.

Zum Beispiel gibt es theoretisch einen ProductCode für Microsoft Word 2003 und einen anderen für Word 2007. Allerdings haben beide Word 2003 und 2007 den gleichen UpgradeCode, da Sie von einem auf den anderen upgraden können.

GUID bedeutet einfach Globally Unique Identifier. Es ist eine große Reihe von Zahlen und Buchstaben, die auf dem Planeten einzigartig sein sollte.

UpgradeCodes und ProductCodes werden in der Registrierung gespeichert, aber sie sind versteckt und verschlüsselt und Sie müssen ein Tool verwenden, um sie abzufragen. Zum Beispiel:

MsiGetProductInfo(ProductCode, INSTALLPROPERTY_VERSIONSTRING, lpVerName, &cchVerName); 
MsiEnumRelatedProducts(UpgradeCode, 0, 0, ProductCode); 

Um zu überprüfen und sehen, ob ein Produkt bereits auf einen Computer des Benutzers installiert ist, können Sie MsiEnumRelatedProducts() verwenden, wie oben beschrieben. Ich denke, Sie fragen mehr als das, was in einer StackOverflow-Antwort beantwortet werden kann. Betrachten Sie mehr über MSI Studium:

MSDN section on Windows Installer

2

Die Productcode und Upgrade GUIDs Ihre Software zu identifizieren. Zusammen mit einem dritten Code, dem PackageCode.

Zusätzlich zu der genannten sauberen API-Möglichkeit ist es natürlich auch möglich, diese Codes in der Registrierung zu erkennen. An einigen Orten sind sie ein bisschen "verändert" das ist wahr, aber das ist keine Verschlüsselung, nur die Nummer neu anordnen, z. unter HKCR \ Installer. Ziemlich einfach zu entziffern und ich denke, es gibt Beispielcode irgendwo im Netz. Ein 10-Liner oder so.

In einer "unverschlüsselt" Art und Weisen Sie den Productcode der installierten Software finden Sie hier:

HKLM \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall
(Aber Vorsicht, gibt es zwei weitere Tasten für Benutzer -spezifische und 32-Bit-WOW-Software auf 64-Bit-Maschinen).

empfiehlt es keine Anwendungen mit ihren Codes zu erfassen, da diese im Falle von Updates ändern können. Wenn Sie einen verwenden, ist UpgradeCode sicherer, weil es sich weniger ändert, aber nicht sicher genug. Suchen Sie nach Registrierungspfaden, die Firmennamen und Versionen Ihrer Software enthalten!

Weitere Informationen:
Der ProductCode ist die wichtigste Identität eines MSI-Setups. Daumenregeln für diese Codes (Productcode, Upgrade) für Setup-Autoren sind:

  1. Sie nicht von ihnen ändern, wenn Sie ein Update durch einen Patch tun.

  2. Wenn Sie eine vollständige Aktualisierung enthält alle Dateien tun mögen, ein so genanntes Major Upgrade tun.
    (Es gibt andere Möglichkeiten, aber dies ist die bequemste, vor allem für Anfänger). a) Ändern Sie Ihren Produktcode für wichtige Upgrades.

  3. Sie das Upgrade nicht jedes Upgrade ändern, außer Sie, dass die neue Version möchte, kann parallel zur altes installiert werden. In MSI "denken" ist es dann ein völlig neues Produkt (besser verständlich als Upgradepfad/Baum).

  4. Wenn Sie den Upgradecode zu ändern, müssen immer den Productcode

  5. Normalerweise über die Package egal. Ein gutes Build-Tool ändert es mit immer wieder zu einer zufälligen neuen GUID. Um einen Installationstest mit diesem Build durchzuführen, müssen Sie möglicherweise zuerst die alte Version deinstallieren oder mehr über MSI erfahren (hier: Small/Minor Upgrades).