Example #1
0
        public static void ScanProducts()
        {
            //clear the row first
            rows.Clear();
            myData.Index = 1;
            Logger.LogMsg("Scan Installed Products/Patches based on MSI/MSP from setup source:\"" + setupSource + "\"");

            UpdateUI("GetInstalledProducts...");
            var ps = MSIHelper.GetInstalledProducts();



            int k = 0;
            int t = ps.Count();

            foreach (ProductInstallation p in ps)
            {
                UpdateUI("Checking (" + (++k).ToString() + "/" + t.ToString() + ") " + p.ProductName);
                try
                {
                    if (isFilterOn && filterString != "")
                    {
                        if (!String.IsNullOrEmpty(p.ProductName))
                        {
                            if (p.ProductName.ToLower().Contains(filterString.ToLower()))
                            {
                                AddRow(p);
                                UpdateUI(p.ProductName + " added.");
                            }
                        } // if (!String.IsNullOrEmpty(p.ProductName))
                    }     //filtered on
                    else  //otherwise add every product
                    {
                        AddRow(p);
                        UpdateUI(p.ProductName + " added.");
                    }
                }
                catch (Exception e)
                {
                    Logger.LogError("ScanWithSQLSetupSource:ProductCode" + p.ProductCode + " " + e.Message);
                }
            }

            Logger.LogMsg("Installed Products/Patches scan found: " + rows.Count + " items.");
            DoneCallBack();
        } //ScanWithoutSQLSetupSource
Example #2
0
        /// <summary>
        /// Add row for MSI package
        /// </summary>
        /// <param name="p"></param>
        public myRow(ProductInstallation p)
        {
            // if(!string.IsNullOrEmpty(p.ProductName) && )
            this.Index = myData.Index++;
            try
            {
                this.ProductVersion = p.ProductVersion.ToString();
                if (!string.IsNullOrEmpty(p.AdvertisedPackageCode))
                {
                    this.PackageCode = p.AdvertisedPackageCode;
                }
                CacheFileStatus stat = CacheFileStatus.Missing;
                if (!String.IsNullOrEmpty(p.LocalPackage))
                {
                    CachedMsiMsp = Path.GetFileName(p.LocalPackage);



                    if (File.Exists(p.LocalPackage))
                    {
                        try
                        {
                            String ver = MSIHelper.Get(p.LocalPackage, "ProductVersion");
                            this.CachedMsiMspVersion = ver;
                            string cachedPackageCode = MSIHelper.GetRevisionNumber(p.LocalPackage);
                            if (!string.IsNullOrEmpty(cachedPackageCode) && !string.IsNullOrEmpty(this.PackageCode))
                            {
                                if (string.Compare(this.PackageCode, cachedPackageCode, StringComparison.Ordinal) != 0)
                                {
                                    stat         = CacheFileStatus.Mismatched;
                                    this.Comment = "Package code doesn't matched. cached file has package code:" + cachedPackageCode + ", but Installer expected:" + this.PackageCode;
                                }
                            }

                            else //if local package exists, but the package code is null, or this.PackageCode is null, set it mismatch

                            {
                                //if both are null, or one is null, set it mismatched
                                if (string.IsNullOrEmpty(cachedPackageCode) || string.IsNullOrEmpty(this.PackageCode))
                                {
                                    stat         = CacheFileStatus.Mismatched;
                                    this.Comment = "At least one of the package codes is null. cached file has package code:" + cachedPackageCode + ", Installer one:" + this.PackageCode;
                                }
                            }
                            //if (!String.IsNullOrEmpty(this.ProductVersion))
                            //{
                            //    if (ver != this.ProductVersion)
                            //    {
                            //       //Cannot set  it here,  if sp1 applied then production version is sp1 vesion, but cached msi is still RTM version
                            //        // stat = CacheFileStatus.Mismatched;
                            //       // Comment = p.LocalPackage + ": ProductVersion not matched";
                            //    }
                            //}

                            /*
                             * //Cannot compare product name, sp1/sp2 will change product name...
                             * if (stat != CacheFileStatus.Mismatched)
                             * {
                             *  //Cannot compare product name, sp1/sp2 will change product name...
                             *  String pn = MSIHelper.Get(p.LocalPackage, "ProductName");
                             *  if (p.ProductName != pn)
                             *  {
                             *      stat = CacheFileStatus.Mismatched;
                             *      Comment = p.LocalPackage + ": ProductName not matched! [" + pn + "] vs [" + p.ProductName + "]";
                             *  }
                             * }
                             */
                        }
                        catch (Exception ex)
                        {
                            // (any exception) set it to mismatched
                            stat    = CacheFileStatus.Mismatched;
                            Comment = ex.Message;
                            Logger.LogError("[Mismatched MSI check failed]" + p.LocalPackage + " \n" + ex.Message);
                        }

                        if (stat != CacheFileStatus.Mismatched)
                        {
                            stat = CacheFileStatus.OK;
                        }
                    }
                    else
                    {
                        stat    = CacheFileStatus.Missing;
                        Comment = p.LocalPackage + " doesn't exist.";
                    }
                }
                else
                {
                    stat = CacheFileStatus.Empty;
                }

                this.Status = stat;

                if (p.SourceList != null)
                {
                    this.PackageName    = p.SourceList.PackageName;
                    this.LastUsedSource = p.SourceList.LastUsedSource;
                }
                this.InstallDate = p.InstallDate;
                //  this.InstallLocation = p.InstallLocation;
                this.InstallSource = p.InstallSource;
                this.IsAdvertised  = p.IsAdvertised.ToString();
                this.ProductCode   = p.ProductCode;
                this.ProductName   = p.ProductName;

                this.Publisher = p.Publisher;
            }
            catch (Exception e)
            {
                Logger.LogError("myRow:ProductInstallation:" + e.Message);
            }
        }
Example #3
0
        /// <summary>
        /// Add row for MSP package
        /// </summary>
        /// <param name="p"></param>
        public myRow(PatchInstallation p)
        {
            this.Index = myData.Index++;

            try
            {
                if (!string.IsNullOrEmpty(p.PatchCode))
                {
                    this.PatchCode = p.PatchCode;
                }

                CacheFileStatus stat = CacheFileStatus.Missing;
                if (!String.IsNullOrEmpty(p.LocalPackage))
                {
                    if (File.Exists(p.LocalPackage))
                    {
                        try
                        {
                            string cachePatchCode = MSIHelper.GetRevisionNumber(p.LocalPackage);
                            if (!string.IsNullOrEmpty(cachePatchCode) && !string.IsNullOrEmpty(this.PatchCode))
                            {
                                if (string.Compare(this.PatchCode, cachePatchCode, StringComparison.Ordinal) != 0)
                                {
                                    stat         = CacheFileStatus.Mismatched;
                                    this.Comment = "Patch code doesn't matched. cached file has package code:" + cachePatchCode + ", but Installer expected:" + this.PatchCode;
                                }
                            }

                            else //if local package exists, but the cachePatchCode is null, or this.PatchCode is null, set it mismatch

                            {
                                //if both are null, or one is null, set it mismatched
                                if (string.IsNullOrEmpty(cachePatchCode) || string.IsNullOrEmpty(this.PatchCode))
                                {
                                    stat         = CacheFileStatus.Mismatched;
                                    this.Comment = "At least one of the patch codes is null. cached file has package code:" + cachePatchCode + ", Installer one:" + this.PatchCode;
                                }
                            }
                            //String ver = MSIHelper.MspGetMetadata(p.LocalPackage, "BaselineVersion");
                            //if (!String.IsNullOrEmpty(this.ProductVersion))
                            //{
                            //    if (ver != this.ProductVersion)
                            //    {
                            //        stat = CacheFileStatus.Mismatched;
                            //        Comment = p.LocalPackage + ": BaselineVersion in MSP not matched the ProductVersion in its MSI. If SP applied this could be normal.";
                            //    }
                            //}
                            //don't check this. patch code is good enough to check mismatched msp file.

                            /*
                             * if (stat != CacheFileStatus.Mismatched)
                             * {
                             *  String pn = MSIHelper.MspGetMetadata(p.LocalPackage, "DisplayName");
                             *  if (p.DisplayName != pn)
                             *  {
                             *      stat = CacheFileStatus.Mismatched;
                             *      Comment = p.LocalPackage + ": DisplayName not matched! Cached file has DisplayName:[" + pn + "] but Installer expected: [" + p.DisplayName + "]";
                             *  }
                             * }
                             */
                        }
                        catch (Exception ex)
                        {
                            // (any exception) set it to mismatched
                            stat    = CacheFileStatus.Mismatched;
                            Comment = ex.Message;
                            Logger.LogError("[Mismatched MSP check failed]" + p.LocalPackage + " \n" + ex.Message);
                        }

                        if (stat != CacheFileStatus.Mismatched)
                        {
                            stat = CacheFileStatus.OK;
                        }
                    }
                    else
                    {
                        stat    = CacheFileStatus.Missing;
                        Comment = p.LocalPackage + " doesn't exist";
                    }
                }
                else
                {
                    stat = CacheFileStatus.Empty;
                }

                this.Status = stat;

                if (p.SourceList != null)
                {
                    this.PackageName    = p.SourceList.PackageName;
                    this.LastUsedSource = p.SourceList.LastUsedSource;
                }
                this.InstallDate = p.InstallDate;

                //patch doesn't have source
                //this.InstallSource = p.InstallSource;
                //this.IsAdvertised = p.IsAdvertised.ToString();
                this.ProductCode = p.ProductCode;
                this.ProductName = p.DisplayName;
                //patch won't have product version
                // this.ProductVersion = p.ProductVersion.ToString();
                //  this.Publisher = p.Publisher;
                this.isPatch = true;

                if (!String.IsNullOrEmpty(p.LocalPackage))
                {
                    CachedMsiMsp = Path.GetFileName(p.LocalPackage);
                    if (File.Exists(p.LocalPackage))
                    {
                        //    CachedMsiMspVersion = MSIHelper.Get(p.LocalPackage, "ProductVersion").ToString();


                        using (var db = new QDatabase(p.LocalPackage, DatabaseOpenMode.ReadOnly))
                        {
                            //using try catch since some msp doesn't all this properties
                            try { this.CachedMsiMspVersion = db.ExecuteScalar("SELECT `Value` FROM `MsiPatchMetadata` WHERE `Property` = '{0}'", "PatchVersion") as string; } catch { }
                            try { this.PatchBaselineVersion = db.ExecuteScalar("SELECT `Value` FROM `MsiPatchMetadata` WHERE `Property` = '{0}'", "BaselineVersion") as string; } catch { };
                            try { this.MoreInfoURL = db.ExecuteScalar("SELECT `Value` FROM `MsiPatchMetadata` WHERE `Property` = '{0}'", "MoreInfoURL") as string; } catch { };
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.LogError("myRow:patch:" + e.Message);
            }
        }