MsiGetProductInfo为已安装的产品返回ERROR_UNKNOWN_PRODUCT

时间:2013-10-02 20:53:17

标签: c# windows registry windows-installer

我正在尝试以编程方式查询安装程序项目中的信息。此信息在安装程序中定义,我不想在代码中复制它。我需要获取Publisher安装程序属性(以及其他一些),但似乎无法使用。

我正在查询:

[DllImport("msi.dll", CharSet = CharSet.Unicode)]
private static extern Int32 MsiGetProductInfo(
    string product, 
    string property, 
    [Out] StringBuilder valueBuf, 
    ref Int32 len);

...

int length = 512;
StringBuilder builder = new StringBuilder(length);
var result = MsiGetProductInfo(
    "{censored}", 
    "Publisher", 
    builder, 
    ref length);

使用RegEdit,我可以看到一个可卸载的产品:

  

{删} _is1

这是我的应用程序,带有“发布者”密钥,这是我所期望的。我不确定为什么会出现“_is1”后缀。安装程序是使用Inno Setup制作的,也许是相关的。我已经尝试在调用MsiGetProductInfo的产品代码中添加此后缀,但它没有效果。

调用返回1605,即ERROR_UNKNOWN_PRODUCT。

如何正确查询此产品的发布者?

1 个答案:

答案 0 :(得分:2)

MSI API仅对基于MSI的安装有用。 Inno Setup不会创建MSI包,因此您无法使用MSI API查询Inno Setup安装。