예제 #1
0
파일: CForm.cs 프로젝트: windrobin/kumpro
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
 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);
예제 #8
0
 public static extern uint MsiGetFeatureCostW(MSIHANDLE hInstall, [NativeTypeName("LPCWSTR")] ushort *szFeature, MSICOSTTREE iCostTree, INSTALLSTATE iState, [NativeTypeName("LPINT")] int *piCost);
예제 #9
0
 public static extern uint MsiSetComponentStateW(MSIHANDLE hInstall, [NativeTypeName("LPCWSTR")] ushort *szComponent, INSTALLSTATE iState);
예제 #10
0
 public static extern uint MsiSetComponentStateA(MSIHANDLE hInstall, [NativeTypeName("LPCSTR")] sbyte *szComponent, INSTALLSTATE iState);
예제 #11
0
 public static extern uint MsiSetFeatureStateW(MSIHANDLE hInstall, [NativeTypeName("LPCWSTR")] ushort *szFeature, INSTALLSTATE iState);
예제 #12
0
 public static extern uint MsiSetFeatureStateA(MSIHANDLE hInstall, [NativeTypeName("LPCSTR")] sbyte *szFeature, INSTALLSTATE iState);
예제 #13
0
 static extern uint MsiConfigureProductEx(
     string szProduct,
     int iInstallLevel,
     INSTALLSTATE eInstallState,
     string szCommandLine);
예제 #14
0
 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;
 }
예제 #15
0
 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
예제 #16
0
 static extern uint MsiConfigureProduct(string szProduct, INSTALLLEVEL InstallLevel, INSTALLSTATE eInstallState);
        public static INSTALLSTATE GetProcuct(string product)
        {
            INSTALLSTATE state = MsiQueryProductState(product);

            return(state);
        }