Ejemplo n.º 1
0
        public static List <string> DISMlist()
        {
            List <string> result = new List <string>(220);

            try
            {
                DismApi.Initialize(DismLogLevel.LogErrors);
                var dismsession = DismApi.OpenOnlineSession();
                var listupdate  = DismApi.GetPackages(dismsession);

                int ab = listupdate.Count;
                //Console.WriteLine("Количество обновлений через DISM: " + ab);
                string sw = "Количество обновлений через DISM: " + ab;
                result.Add(sw);

                foreach (DismPackage feature in listupdate)
                {
                    result.Add(feature.PackageName);
                    //result.Add($"[Имя пакета] {feature.PackageName}");
                    //result.Add($"[Дата установки] {feature.InstallTime}");
                    //result.Add($"[Тип обновления] {feature.ReleaseType}");
                }
            }

            catch (Exception ex)
            {
                result.Add("Что-то пошло не так: " + ex.Message);
            }

            return(result);
        }
Ejemplo n.º 2
0
        public void GetPackageInfoExSimple()
        {
            using (DismSession session = DismApi.OpenOnlineSession())
            {
                DismPackage package = DismApi.GetPackages(session).FirstOrDefault(i => i.PackageState == DismPackageFeatureState.Installed);

                package.ShouldNotBeNull();

                DismPackageInfoEx packageInfoEx = DismApi.GetPackageInfoExByName(session, package.PackageName);

                packageInfoEx.CapabilityId.ShouldNotBeNullOrWhiteSpace();
            }
        }
Ejemplo n.º 3
0
        public static void UninstallPEComponents(string ospath, ProgressCallback progressCallback)
        {
            //
            // Initialize DISM log
            //
            string tempLog = Path.GetTempFileName();

            DismApi.Initialize(DismLogLevel.LogErrorsWarningsInfo, tempLog);

            var session  = DismApi.OpenOfflineSession(ospath);
            var packages = DismApi.GetPackages(session);
            List <DismPackage> componentsToRemove = new List <DismPackage>();

            //
            // Queue components we don't need according to our hardcoded list for removal
            //
            foreach (var package in packages)
            {
                if (componentsNotInWinPE.Any(x => package.PackageName.StartsWith(x, StringComparison.InvariantCultureIgnoreCase)))
                {
                    componentsToRemove.Add(package);
                }
            }

            //
            // Remove components
            //
            foreach (var pkg in componentsToRemove)
            {
                try
                {
                    void callback3(DismProgress progress)
                    {
                        progressCallback?.Invoke(false, (int)Math.Round((double)progress.Current / progress.Total * 100), "Removing " + pkg.PackageName);
                    }
                    DismApi.RemovePackageByName(session, pkg.PackageName, callback3);
                }
                catch //(Exception ex)
                {
                }
            }

            //
            // Clean DISM
            //
            DismApi.CloseSession(session);
            DismApi.Shutdown();
            File.Delete(tempLog);
        }