2013-10-02 79 views
0

我试图以编程方式查询安装程序项目中的信息。这些信息在安装程序中定义,我不想在代码中复制它。我需要获取Publisher安装程序属性(以及其他几个),但似乎无法让事情发挥作用。MsiGetProductInfo返回已安装产品的ERROR_UNKNOWN_PRODUCT

我使用的查询:

[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。

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

回答

2

MSI API仅适用于基于MSI的安装。 Inno Setup不会创建MSI软件包,因此无法使用MSI API来查询有关Inno安装程序的安装信息。

+0

我想是时候添加注册表键了。感谢鲍勃,我需要那个。 – PatrickV

相关问题