【问题标题】:Find the location of an application on Windows在 Windows 上查找应用程序的位置
【发布时间】:2016-06-08 11:26:42
【问题描述】:

拥有应用程序的产品代码或产品名称,如何找到该应用程序的安装位置?一定有这个信息,因为 Windows 卸载知道要删除哪个文件夹。我希望它会在注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{ProductCode}”下,但该位置不存在。我搜索了整个注册表,但我找不到它。你知道我是怎么做到的吗?可以找到该位置吗?如果您有一些 .NET 代码来执行此操作,那就更好了。

【问题讨论】:

    标签: windows-installer registry


    【解决方案1】:

    如果您有产品代码,您可以在调用MsiGetProductInfo 时使用它。此调用可能会告诉您 INSTALLPROPERTY_INSTALLLOCATION,或者它可以告诉您 INSTALLPROPERTY_LOCALPACKAGE,然后您可以将其与MsiOpenDatabase 一起使用以查找其组件。一旦您可以访问它的组件,您就可以调用MsiGetComponentPath 来定位它的密钥文件。最终,其中一个组件应该能够告诉您您需要知道的内容。

    如果您提前了解组件,则可以跳过大部分步骤。如果这是来自另一个包中的内容,您可以使用基于 CompLocator 的搜索来查找它,而无需编写自定义操作。

    如果您必须使用 .NET 代码来执行此操作,您可以为这些函数制作 P/Invoke 包装器,使用现有的类似 DTF 中的那些,或者查看 COM 可访问的 Windows Installer Automation Interface 是否公开了正确的API。

    【讨论】:

      【解决方案2】:

      这个问题有点模糊,因为通常没有安装应用程序的单一位置。但是,如果您指的是用户通常可以更改的主“应用程序文件夹”,那么它可能会被存储。但是,该安装位置仅在安装程序发生时才在注册表中(并且可从 MsiGetProductInfo 获得)。安装程序必须将 ARPINSTALLLOCATION 设置为(通常)TARGETDIR 以便 Windows 存储它。

      否则,正如迈克尔所说,从产品中查找组件 ID 并获取其路径。但是,如果您正在创建安装并需要在该位置安装一些东西,那么您不需要代码。大多数安装工具都有一个组件搜索功能,可用于为您的文件设置安装目录。

      【讨论】:

        猜你喜欢
        • 2019-10-19
        • 1970-01-01
        • 1970-01-01
        • 2011-08-21
        • 2018-04-04
        • 2010-12-29
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        相关资源
        最近更新 更多