Windows在哪里存储要卸载的MSI文件?


25

我试图弄清楚Windows(XP到7)如何处理MSI文件的安装和卸载。我遇到Windows Installer由于缺少原始MSI文件而无法卸载的情况,这使我相信它会在某个位置存储所有已安装MSI软件包的副本。哪里?

我有一些理论。

  1. 它希望它与安装时所在的文件夹相同。注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall的确指向原始安装文件夹,而缺少MSI文件时的错误消息通常指向此文件夹。但是,从该文件夹中删除MSI文件不会妨碍卸载过程,因此我拒绝了这一理论。

  2. C:\Windows\Installer。该文件夹实际上包含一堆看似随机命名的MSI文件。但是此列表不完整。我确实在1)中提到的注册表项中找到了条目,该条目在此文件夹中没有MSI副本。

那么这是如何工作的呢?即使MSI不在1)中也不在2)中,Windows安装程序如何卸载MSI安装的应用程序?


Windows并不总是保留它。用户可以通过多种方式告诉Windows实际上清除其对这些文件的缓存。如果您拥有无法卸载的软件,则意味着开发人员错误地安装了安装程序。该位置将是Windows XP中(为什么你担心不支持的操作系统)和Windows 7和/或Windows 8之间的不同
Ramhound

Answers:


44

显然,它是这样工作的(在Windows 7上,我不了解XP和其他操作系统):

用户安装某些应用程序时,Windows将执行以下操作:

1)创建一个注册表项

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

为此应用程序。

如果您有权访问应用程序安装程序的原始msi文件,则可以通过以下方法找到[ProductID GUID]:在orca.exe中打开该msi文件,然后单击orca左侧的“属性”,然后查找“ ProductCode”右边的线。如果您无权访问原始* .msi文件,则只需搜索注册表项HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ 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“ LocalPackage”的注册表中创建一个注册表项,此注册表项将指向重命名的msi文件。要在C:\ windows \ Installer中找到文件,可以在Windows资源管理器中导航到该文件夹​​,将其切换到“详细信息”视图,使“主题”列可见,所有nnnnnnnn.msi都将找到其对应的产品名称。


6
我想为隐藏的秘密-投票两次make column "Subject" visible and you will see for all nnnnnnnn.msi fies their corresponding name of product.。Windows是一种神秘的操作系统:P
RBT

3)步骤3对我来说是必要的。我必须复制5188bfc6.msi文件(hex#.msi),并将其重命名为原始文件名MyApp.msi,然后卸载程序才能接受该文件。此卸载后工作正常。
乔B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.