在Windows

时间:2016-06-08 11:26:43

标签: windows-installer registry

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

2 个答案:

答案 0 :(得分:1)

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

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

如果必须使用.NET代码执行此操作,则可以为这些函数创建P / Invoke包装器,使用DTF中的现有包装,或者查看COM是否可访问{{3}公开正确的API。

答案 1 :(得分:0)

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

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