Beispiel #1
0
        public static async Task <DismFeatureInfo> EnableWindowsFeatures(string featureName,
                                                                         DismProgressCallback dismProgressCallback)
        {
            if (string.IsNullOrWhiteSpace(featureName))
            {
                throw new ArgumentException();
            }

            DismApi.Initialize(DismLogLevel.LogErrors);

            DismFeatureInfo retVal;

            try
            {
                using (var session = DismApi.OpenOnlineSession())
                {
                    DismApi.EnableFeatureByPackageName(session, featureName, null, false, true, new List <string>(),
                                                       dismProgressCallback);

                    retVal = DismApi.GetFeatureInfo(session, featureName);
                }
            }
            finally
            {
                DismApi.Shutdown();
            }

            await Task.Delay(200).ConfigureAwait(false);

            return(retVal);
        }
Beispiel #2
0
        public void PerformTreatment()
        {
            string featureName;

            if (Environment.Is64BitOperatingSystem)
            {
                featureName = IE64BitName;
            }
            else
            {
                featureName = IE32BitName;
            }

            try
            {
                using (DismSession session = DismApi.OpenOnlineSession())
                {
                    DismFeatureInfo info = DismApi.GetFeatureInfo(session, featureName);
                    if (
                        info.FeatureState == DismPackageFeatureState.NotPresent ||
                        info.FeatureState == DismPackageFeatureState.Removed ||
                        info.FeatureState == DismPackageFeatureState.Staged)
                    {
                        logger.Log("Internet Explorer 11 is not present on the system.");
                        return;
                    }

                    if (info.FeatureState == DismPackageFeatureState.UninstallPending)
                    {
                        logger.Log("Internet Explorer 11 is already pending uninstall.");
                        return;
                    }

                    try
                    {
                        logger.Log("Disabling Internet Explorer 11...");
                        DismApi.DisableFeature(session, featureName, null, true);
                    }
                    catch (DismRebootRequiredException ex)
                    {
                        logger.Log("Successfully disabled Internet Explorer 11. {0}", ex.Message);
                        return;
                    }

                    logger.Log("Successfully disabled Internet Explorer 11.");
                }
            }
            catch (Exception ex)
            {
                logger.Log("An error occurred while disabling Internet Explorer: {0}", ex.Message);
            }
        }
Beispiel #3
0
        public static async Task <DismFeatureInfo> GetWindowsFeatureInfo(string featureName)
        {
            DismApi.Initialize(DismLogLevel.LogErrors);

            DismFeatureInfo retVal;

            try
            {
                using (var session = DismApi.OpenOnlineSession())
                {
                    retVal = DismApi.GetFeatureInfo(session, featureName);
                }
            }
            finally
            {
                DismApi.Shutdown();
            }

            await Task.Delay(200).ConfigureAwait(false);

            return(retVal);
        }
Beispiel #4
0
        public override bool ShouldPerformTreatment()
        {
            try
            {
                using (DismSession session = DismApi.OpenOnlineSession())
                {
                    DismFeatureInfo info = DismApi.GetFeatureInfo(session, resolvedFeatureName);
                    if (
                        info.FeatureState == DismPackageFeatureState.NotPresent ||
                        info.FeatureState == DismPackageFeatureState.Removed ||
                        info.FeatureState == DismPackageFeatureState.Staged ||
                        info.FeatureState == DismPackageFeatureState.UninstallPending)
                    {
                        return(false);
                    }
                }
            }
            catch
            {
                return(false);
            }

            return(true);
        }
 public async Task <bool> IsFeatureEnabledAsync(string featureName) =>
 DismApi.GetFeatureInfo(await GetDismSessionAsync(), featureName).FeatureState == DismPackageFeatureState.Installed;
Beispiel #6
0
        public static async Task <IEnumerable <KeyValuePair <string, DismFeatureInfo> > > GetWindowsFeatureInfo(
            IEnumerable <string> featureNames)
        {
            var enumerable = featureNames as string[] ?? featureNames.ToArray();

            if (!enumerable.Any())
            {
                throw new ArgumentException();
            }

            DismApi.Initialize(DismLogLevel.LogErrors);

            var retVal = new List <KeyValuePair <string, DismFeatureInfo> >();

            try
            {
                using (var session = DismApi.OpenOnlineSession())
                {
                    retVal.AddRange(enumerable.Where(key => !string.IsNullOrWhiteSpace(key))
                                    .Select(featureName => new KeyValuePair <string, DismFeatureInfo>(featureName,
                                                                                                      DismApi.GetFeatureInfo(session, featureName))));
                }
            }
            finally
            {
                DismApi.Shutdown();
            }

            await Task.Delay(200).ConfigureAwait(false);

            return(retVal);
        }