windows - Windows在卸载软件时如何找到安装位置
问题描述
当我运行允许自定义安装位置/路径的安装程序时,文件将正确放置在我选择的位置。
当我运行相同的 MSI 并选择删除(或从添加/删除程序中卸载)时,它如何知道安装位置以便删除正确的文件?
我以为它将存储在“Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{GUID}”,但是当我查看已安装软件的该位置时,“InstallLocation”键为空。
但是,无论我如何卸载它,它都知道要删除哪个文件夹,无论我把它放在哪里。该信息是存储在注册表中的其他位置,还是存储在 MSI 文件本身中?
解决方案
这是一个非常复杂的问题,因为可以将 MSI 配置为在您告诉它的任何地方删除其卸载文件。通常默认情况下,它会在 C:\Windows\Installer 中创建一个具有特定名称的卸载 .msi 文件。
但不要依赖卸载 .msi 被放置在此目录中,也不要依赖卸载注册表项中存在卸载路径。这个关键与最终用户的便利性一样重要。
卸载信息通常包含在 MSI 文件中,但它不是必须的,并且在安装期间它可以创建密钥以帮助升级和卸载。安装将保留在注册表中的信息完全取决于您如何配置 .msi 数据库。
添加更多内容... Nullsoft、InstallAware 和 InstallShield 等许多安装程序喜欢自己做事并将卸载信息放在其他地方。所以InstallShield 喜欢创建一个InstallShield 安装信息文件夹,而Nullsoft 喜欢创建.dat 文件和uninstall.exe。但除此之外,这些安装程序仍在调用 MSI 并创建安装表和数据库。因此,卸载信息的实际位置并不是一门精确的科学!
推荐阅读
- r - R 包源文件
- android-studio - 哪个版本的opencv适合android studio 4.0.0?
- r - eval 中的错误(predvars、data、env):找不到对象“V1”
- python-3.x - 如果匹配条件,如何使用 python 更改 .xlsx 单元格的颜色,如果不保留旧颜色
- angular - 在实时数据库中保存非常大的字符串 - 最佳实践?
- python - 如何从 URL 获取 python 函数返回值?
- python - 用字符串枚举列表会给出错误的结果
- sql - AWS Athena - 如何将字符串列转换为日期?(列包括空)
- jenkins - 本地主机上的 Jenkins 配置
- javascript - 如何通过搜索子元素字符串来选择父元素?