2009-03-21 14 views
4

Ich habe kein Ende der Probleme beim Aufruf von MsiEnumRelatedProducts aus C#. Ich habe ein paar Varianten der p/invoke-Definition ausprobiert, aber kein Glück (out und ref). Ich denke, das Problem ist der letzte Parameter, der ein LPTSTR ist, der auf eine Zeichenfolge mit 39 Zeichen zeigen soll.Der Aufruf von MsiEnumRelatedProducts aus C# stürzt ab

Hier ist die pinvoke und rufen:

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); 

Beachten Sie, dass der Absturz nur auftritt, wenn die übergebene Upgrade mindestens 1 installiert Produkt hat.

Antwort

10

versuchen, wie so erklärt:

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

genau richtig! Vielen Dank! – user53794

+0

Großartig! Vielen Dank. – Ries