Nil*_*zor 29 windows windows-registry
我试图弄清楚 Windows(XP 到 7)是如何处理 MSI 文件的安装和卸载的。我遇到过 Windows Installer 无法卸载的情况,因为它缺少原始 MSI 文件,这让我相信它在某处存储了所有已安装 MSI 包的副本。在哪里?
我有几个理论。
它希望它位于安装时所在的文件夹中。中的注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall确实指向原始安装文件夹,缺少 MSI 文件时的错误消息通常指向此。不过,从此文件夹中删除 MSI 文件不会妨碍卸载过程,所以我拒绝了这个理论。
C:\Windows\Installer. 这个文件夹实际上包含一堆看似随机命名的MSI文件。但是这个列表是不完整的。我确实在 1) 中提到的注册表项中找到了该文件夹中没有 MSI 副本的条目。
那么这是如何工作的呢?即使 MSI 不在 1) 和 2) 中,Windows 安装程序如何能够卸载 MSI 安装的应用程序?
far*_*ast 49
显然它是这样工作的(在 Windows 7 上,我不知道 XP 和其他操作系统):
当用户安装某个应用程序时,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 中搜索应用程序名称即可。
如果您想从控制面板中已安装的应用程序列表中删除您的应用程序(例如拒绝卸载),您可以从此卸载键中删除该条目。它肯定会从控制面板的列表中消失,但 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 都显示其对应的产品名称。
| 归档时间: |
|
| 查看次数: |
85987 次 |
| 最近记录: |