web-dev-qa-db-ja.com

Windowsはアンインストール用のMSIファイルをどこに保存しますか?

Windows(XP〜7)がMSIファイルのインストールとアンインストールをどのように処理するかを理解しようとしています。元のMSIファイルがないためにWindowsインストーラーをアンインストールできない状況で、インストールされているすべてのMSIパッケージのコピーがどこかに保存されていると思います。どこ?

私はいくつかの理論を持っています。

  1. インストール元と同じフォルダにあることを想定しています。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallのレジストリキーは、元のインストールフォルダーを指しており、MSIファイルが見つからない場合のエラーメッセージは、多くの場合これを指しています。ただし、このフォルダーからMSIファイルを削除しても、アンインストールプロセスが妨げられることはないため、この理論は拒否しました。

  2. C:\Windows\Installer。このフォルダには、実際には一見ランダムに名付けられたMSIファイルが多数含まれています。しかし、このリストは不完全です。このフォルダーにMSIコピーがない1)に記載されているレジストリキーのエントリを見つけました。

これはどのように機能するのでしょうか? MSIが1)にも2)にもない場合でも、WindowsインストーラーはどのようにMSIがインストールしたアプリケーションをアンインストールできますか?

26
Nilzor

どうやらこれは次のように動作します(Windows 7では、XPおよびその他のOS)についてはわかりません):

ユーザーがアプリをインストールすると、Windowsは次のことを行います。

1)レジストリキーを作成します

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[ProductId GUID]

このアプリの場合。

アプリのインストーラーの元のmsiファイルにアクセスできる場合は、orca.exeでmsiファイルを開き、orcaの左側にある[プロパティ]をクリックして、[ProductCode]を探すと、[ProductID GUID]を見つけることができます。右側の線。元の* .msiファイルにアクセスできない場合は、レジストリキーHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallでアプリの名前を検索できます。

コントロールパネルのインストール済みアプリのリストからアプリ(たとえば、アンインストールを拒否する)を削除する場合は、このUninstallキーからエントリを削除できます。コントロールパネルのリストからは確実に消えますが、Windowsはそれを記憶しています。たとえば、同じアプリの次のバージョンをインストールしようとした場合でも、インストーラは以前のバージョンのアンインストールを要求する場合があります。これについては、項目2を参照してください。

2)Windowsは元の* .msiファイルをC:\ Windows\Installerフォルダーにコピーし、ランダムな名前に変更します(ただし、.msi拡張子は保持されます)。 Windowsはまた、レジストリのキーをHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[InternalUserId]\Products\[some random guid-like sequence of chars identifying to windows your installation]\InstallProperties. ValueNameに作成します。このregキーの "LocalPackage"は、名前が変更されたmsiファイルを指します。 C:\ windows\Installerでファイルを見つけるには、Windowsエクスプローラーでこのフォルダーに移動し、詳細ビューに切り替えて、「件名」列を表示すると、すべてのnnnnnnnn.msiファイルに対応する製品名が表示されます。

45
farfareast