private void T(String id, String ver, String product, String url) { INSTALLSTATE ist = MsiQueryProductState(id); ListViewItem lvi = new ListViewItem(product); lvi.SubItems.Add((ver ?? "").TrimEnd('?')); lvi.SubItems.Add(id); lvi.SubItems.Add(ist.ToString()); if (url != null) { lvi.SubItems.Add(url); } switch (ist) { case INSTALLSTATE.Default: lvi.ImageKey = "Y"; lvi.Font = new Font(lvi.Font, FontStyle.Bold); lvi.BackColor = Color.FromKnownColor(KnownColor.Info); lvi.ForeColor = Color.FromKnownColor(KnownColor.InfoText); break; default: lvi.ImageKey = "N"; break; } lvR.Items.Add(lvi); }
public static bool IsProductInstalled(string[] strCodes) { for (int i = 0; i < strCodes.Length; i++) { INSTALLSTATE state = MsiQueryProductState(strCodes[i]); if (state == INSTALLSTATE.INSTALLSTATE_LOCAL || state == INSTALLSTATE.INSTALLSTATE_DEFAULT) { return(true); } } return(false); }
/// <summary> /// Checks an MSI product code to see if it is installed. /// </summary> /// <param name="code"></param> /// <returns></returns> public static bool MsiProductInstalled(string code) { INSTALLSTATE state = MsiQueryProductState(code); switch (state) { case INSTALLSTATE.INSTALLSTATE_DEFAULT: case INSTALLSTATE.INSTALLSTATE_LOCAL: case INSTALLSTATE.INSTALLSTATE_SOURCE: return(true); } return(false); }
public static unsafe string MsiGetComponentPath( Guid productCode, Guid componentCode, string userId, InstallContext context) { uint pathSize = 0; INSTALLSTATE state = PInvoke.MsiGetComponentPathEx( szProductCode: GuidToCode(productCode), szComponentCode: GuidToCode(componentCode), szUserSid: userId, dwContext: (MSIINSTALLCONTEXT)context, lpOutPathBuffer: null, pcchOutPathBuffer: &pathSize); if (state != INSTALLSTATE.INSTALLSTATE_MOREDATA) { return(null); } if (pathSize == 0) { return(string.Empty); } // Increase buffer for terminating NULL character. pathSize++; var path = stackalloc char[(int)pathSize]; state = PInvoke.MsiGetComponentPathEx( szProductCode: GuidToCode(productCode), szComponentCode: GuidToCode(componentCode), szUserSid: userId, dwContext: (MSIINSTALLCONTEXT)context, lpOutPathBuffer: path, pcchOutPathBuffer: &pathSize); return(new string(path, 0, (int)pathSize)); }
static private string InstallStateString(INSTALLSTATE installState) { string state; switch (installState) { case INSTALLSTATE.INSTALLSTATE_NOTUSED: state = "Disabled"; break; case INSTALLSTATE.INSTALLSTATE_BADCONFIG: state = "Corrupt"; break; case INSTALLSTATE.INSTALLSTATE_INCOMPLETE: state = "Incomplete"; break; case INSTALLSTATE.INSTALLSTATE_SOURCEABSENT: state = "Absent"; break; case INSTALLSTATE.INSTALLSTATE_MOREDATA: state = "Buffer Overflow"; break; case INSTALLSTATE.INSTALLSTATE_INVALIDARG: state = "Invalid"; break; case INSTALLSTATE.INSTALLSTATE_UNKNOWN: state = "Unknown"; break; case INSTALLSTATE.INSTALLSTATE_BROKEN: state = "Broken"; break; case INSTALLSTATE.INSTALLSTATE_ADVERTISED: state = "Advertised"; break; case INSTALLSTATE.INSTALLSTATE_ABSENT: state = "Absent"; break; case INSTALLSTATE.INSTALLSTATE_LOCAL: state = "Local"; break; case INSTALLSTATE.INSTALLSTATE_SOURCE: state = "Source"; break; case INSTALLSTATE.INSTALLSTATE_DEFAULT: state = "Installed"; break; default: state = installState.ToString(); break; } return(state); }
static public void PopulateProductList(ListView list) { list.Items.Clear(); StringBuilder sbProductCode = new StringBuilder(39); int i = 0; int installedContext = 0; int cchSid = 0; INSTALLSTATE installState = 0; while (0 == MsiEnumProductsEx(null, null, MSIINSTALLCONTEXT_USERMANAGED + MSIINSTALLCONTEXT_USER + MSIINSTALLCONTEXT_MACHINE, i++, sbProductCode, out installedContext, null, ref cchSid)) //while (0 == MsiEnumProducts(i++, sbProductCode)) { String strProductCode = sbProductCode.ToString(); int productNameLen = 512; int versionStringLen = 256; int installDateLen = 16; StringBuilder sbProductName = new StringBuilder(productNameLen); StringBuilder sbVersionString = new StringBuilder(versionStringLen); StringBuilder sbInstallDateString = new StringBuilder(installDateLen); MsiGetProductInfo(strProductCode, "ProductName", sbProductName, ref productNameLen); MsiGetProductInfo(strProductCode, "VersionString", sbVersionString, ref versionStringLen); MsiGetProductInfo(strProductCode, "InstallDate", sbInstallDateString, ref installDateLen); installState = MsiQueryProductState(strProductCode); ListViewItem lvi = new ListViewItem(sbProductName.ToString(), 0); lvi.SubItems.Add(strProductCode); lvi.SubItems.Add(sbVersionString.ToString()); lvi.SubItems.Add(ContextString(installedContext)); lvi.SubItems.Add(InstallStateString(installState)); lvi.SubItems.Add(InstallDateString(sbInstallDateString.ToString())); list.Items.Add(lvi); } }
public static extern uint MsiEnumComponentCostsW(MSIHANDLE hInstall, [NativeTypeName("LPCWSTR")] ushort *szComponent, [NativeTypeName("DWORD")] uint dwIndex, INSTALLSTATE iState, [NativeTypeName("LPWSTR")] ushort *szDriveBuf, [NativeTypeName("LPDWORD")] uint *pcchDriveBuf, [NativeTypeName("LPINT")] int *piCost, [NativeTypeName("LPINT")] int *piTempCost);
public static extern uint MsiGetFeatureCostW(MSIHANDLE hInstall, [NativeTypeName("LPCWSTR")] ushort *szFeature, MSICOSTTREE iCostTree, INSTALLSTATE iState, [NativeTypeName("LPINT")] int *piCost);
public static extern uint MsiSetComponentStateW(MSIHANDLE hInstall, [NativeTypeName("LPCWSTR")] ushort *szComponent, INSTALLSTATE iState);
public static extern uint MsiSetComponentStateA(MSIHANDLE hInstall, [NativeTypeName("LPCSTR")] sbyte *szComponent, INSTALLSTATE iState);
public static extern uint MsiSetFeatureStateW(MSIHANDLE hInstall, [NativeTypeName("LPCWSTR")] ushort *szFeature, INSTALLSTATE iState);
public static extern uint MsiSetFeatureStateA(MSIHANDLE hInstall, [NativeTypeName("LPCSTR")] sbyte *szFeature, INSTALLSTATE iState);
static extern uint MsiConfigureProductEx( string szProduct, int iInstallLevel, INSTALLSTATE eInstallState, string szCommandLine);
private static string InstallStateString(INSTALLSTATE installState) { string state; switch (installState) { case INSTALLSTATE.INSTALLSTATE_NOTUSED: state = "Disabled"; break; case INSTALLSTATE.INSTALLSTATE_BADCONFIG: state = "Corrupt"; break; case INSTALLSTATE.INSTALLSTATE_INCOMPLETE: state = "Incomplete"; break; case INSTALLSTATE.INSTALLSTATE_SOURCEABSENT: state = "Absent"; break; case INSTALLSTATE.INSTALLSTATE_MOREDATA: state = "Buffer Overflow"; break; case INSTALLSTATE.INSTALLSTATE_INVALIDARG: state = "Invalid"; break; case INSTALLSTATE.INSTALLSTATE_UNKNOWN: state = "Unknown"; break; case INSTALLSTATE.INSTALLSTATE_BROKEN: state = "Broken"; break; case INSTALLSTATE.INSTALLSTATE_ADVERTISED: state = "Advertised"; break; case INSTALLSTATE.INSTALLSTATE_ABSENT: state = "Absent"; break; case INSTALLSTATE.INSTALLSTATE_LOCAL: state = "Local"; break; case INSTALLSTATE.INSTALLSTATE_SOURCE: state = "Source"; break; case INSTALLSTATE.INSTALLSTATE_DEFAULT: state = "Installed"; break; default: state = installState.ToString(); break; } return state; }
public static extern int MsiConfigureProduct( string szProduct, // product code int iInstallLevel, // how much of the product to install INSTALLSTATE eInstallState); // local/source/default/absent/lock/uncache
static extern uint MsiConfigureProduct(string szProduct, INSTALLLEVEL InstallLevel, INSTALLSTATE eInstallState);
public static INSTALLSTATE GetProcuct(string product) { INSTALLSTATE state = MsiQueryProductState(product); return(state); }