MsiProvideAssembly (msi)
Last changed: 65.54.188.149

.
Summary
Returns the full path to a Windows Installer component containing an assembly. The function prompts for a source and performs any necessary installation. MsiProvideAssembly also increments the usage count for the feature.

C# Signature:

[DllImport("msi.dll", CharSet=CharSet.Auto)]
static extern uint MsiProvideAssembly(string assembly, string context, uint mode, int info, System.Text.StringBuilder path, ref int pathSize);

VB Signature:

Declare Function MsiProvideAssembly Lib "msi.dll" (TODO) As TODO

User-Defined Types:

None.

Notes:

This function is available starting with Windows Installer version 2.0.

Tips & Tricks:

Please add some!

Sample Code:

The following method will only work if your assembly was installed via Windows Installer:

public static string EnsureAssemblyIsInstalled(string assemblyName, string installPath)
{
    int buffer = 1024;

    StringBuilder path = new StringBuilder(1024);

    uint error = UnsafeInterop.MsiProvideAssembly(assemblyName, installPath, 0, 0, path, ref buffer);

    if (error == 0)
        return path.ToString();     // Already installed or successfully installed

    // Failed to install
    return null;            
}


Alternative Managed API:

MSI interop library

http://sourceforge.net/project/showfiles.php?group_id=40188&package_id=110212

Documentation