【问题标题】:Calling MsiEnumRelatedProducts from C# is crashing从 C# 调用 MsiEnumRelatedProducts 崩溃
【发布时间】:2009-03-21 09:20:16
【问题描述】:

我从 C# 调用 MsiEnumRelatedProducts 时遇到了无穷无尽的麻烦。我在 p/invoke 定义上尝试了几种变体,但没有运气(out 和 ref)。我认为问题在于最后一个参数,它是一个 LPTSTR,它应该指向一个 39 个字符长的字符串。

这里是 pinvoke 和调用:

public static string EnumRelatedProducts(string UpgradeCode, int Index)
{
    string ProductCode;
    UInt32 rc = MsiEnumRelatedProducts(UpgradeCode, 0, Index, out ProductCode);
    Console.WriteLine("Returned");
    if (rc != 0)
    {
        return string.Empty;
    }

    return ProductCode;
}

[DllImport("msi.dll", CharSet = CharSet.Auto)]
private static extern UInt32 MsiEnumRelatedProducts(string UpgradeCode, int reserved, int Index, out string ProductCode);

请注意,仅当传递的 UpgradeCode 至少安装了 1 个产品时才会发生崩溃。

【问题讨论】:

    标签: windows installation windows-installer pinvoke


    【解决方案1】:

    尝试像这样声明:

    [DllImport("msi.dll")]
    private static extern uint MsiEnumRelatedProducts(
                 string lpUpgradeCode, 
                 uint dwReserved, 
                 uint lProductIndex, 
                 StringBuilder lpProductBuf);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      相关资源
      最近更新 更多