【问题标题】:MsiGetProductInfo returning ERROR_UNKNOWN_PRODUCT for an installed productMsiGetProductInfo 为已安装的产品返回 ERROR_UNKNOWN_PRODUCT
【发布时间】:2023-03-31 07:44:01
【问题描述】:

我正在尝试以编程方式从安装程序项目中查询信息。此信息在安装程序中定义,我不想在代码中复制它。我需要获取 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

这是我的应用程序,带有我所期望的“Publisher”键。我不确定为什么有“_is1”后缀。安装程序是使用 Inno Setup 制作的,也许是相关的。我曾尝试在调用 MsiGetProductInfo 时在产品代码上添加此后缀,但没有效果。

调用返回 1605,即 ERROR_UNKNOWN_PRODUCT。

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

【问题讨论】:

    标签: c# windows registry windows-installer


    【解决方案1】:

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

    【讨论】:

    • 我想是时候添加注册表项了。谢谢鲍勃,我需要那个。
    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多