private void SetVersionComboItems()
        {
            const int expectedVersions = 5;

            this.taskVersionCombo.BeginUpdate();
            this.taskVersionCombo.Items.Clear();
            string[] versions = EditorProperties.Resources.TaskCompatibility.Split('|');
            if (versions.Length != expectedVersions)
            {
                throw new ArgumentOutOfRangeException("Locale specific information about supported Operating Systems is insufficient.");
            }
            int max = (this.TaskService == null) ? expectedVersions - 1 : TaskService.LibraryVersion.Minor;
            TaskCompatibility comp       = (td != null) ? td.Settings.Compatibility : TaskCompatibility.V1;
            TaskCompatibility lowestComp = (td != null) ? td.LowestSupportedVersion : TaskCompatibility.V1;

            switch (comp)
            {
            case TaskCompatibility.AT:
                for (int i = max; i > 1; i--)
                {
                    this.taskVersionCombo.Items.Add(new ComboItem(versions[i], i, comp >= lowestComp));
                }
                this.taskVersionCombo.SelectedIndex = this.taskVersionCombo.Items.Add(new ComboItem(versions[0], 0));
                break;

            default:
                for (int i = max; i > 0; i--)
                {
                    this.taskVersionCombo.Items.Add(new ComboItem(versions[i], i, comp >= lowestComp));
                }
                this.taskVersionCombo.SelectedIndex = this.taskVersionCombo.Items.IndexOf((int)comp);
                break;
            }
            this.taskVersionCombo.EndUpdate();
        }
        public static string ToFriendlyString(TaskCompatibility tc)
        {
            switch (tc)
            {
            case TaskCompatibility.AT:
                return("AT command");

            case TaskCompatibility.V1:
                return("Windows Server™ 2003, Windows® XP, or Windows® 2000");

            case TaskCompatibility.V2:
                return("Windows Vista™, Windows Server™ 2008");

            case TaskCompatibility.V2_1:
                return("Windows® 7, Windows Server™ 2008 R2");

            case TaskCompatibility.V2_2:
                return("Windows® 8.x, Windows Server™ 2012");

            case TaskCompatibility.V2_3:
                return("Windows® 10, Windows Server™ 2016");

            default: return("");
            }
        }
        internal TSNotSupportedException(TaskCompatibility minComp)
        {
            min = minComp;
            StackTrace stackTrace = new StackTrace();
            StackFrame stackFrame = stackTrace.GetFrame(2);
            MethodBase methodBase = stackFrame.GetMethod();

            myMessage = string.Format("{0}.{1} is not supported on {2}", methodBase.DeclaringType.Name, methodBase.Name, this.LibName);
        }
        internal TSNotSupportedException(TaskCompatibility minComp)
        {
            min = minComp;
            var stackTrace = new StackTrace();
            var stackFrame = stackTrace.GetFrame(2);
            var methodBase = stackFrame.GetMethod();

            myMessage = $"{methodBase.DeclaringType?.Name}.{methodBase.Name} is not supported on {LibName}";
        }
        private void SetVersionComboItems()
        {
            const int expectedVersions = 6;

            taskVersionCombo.BeginUpdate();
            taskVersionCombo.Items.Clear();
            string[] versions = EditorProperties.Resources.TaskCompatibility.Split('|');
            if (versions.Length != expectedVersions)
            {
                throw new ArgumentOutOfRangeException("Locale specific information about supported Operating Systems is insufficient.");
            }
            int max = (TaskService == null) ? expectedVersions - 1 : Math.Min(TaskService.LibraryVersion.Minor, TaskService.HighestSupportedVersion.Minor);

            if (Environment.OSVersion.Version >= new Version(6, 2))
            {
                using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"))
                    versions[TaskService.LibraryVersion.Minor] = key.GetValue("ProductName", Environment.OSVersion).ToString();
            }
            TaskCompatibility comp       = td?.Settings.Compatibility ?? TaskCompatibility.V1;
            TaskCompatibility lowestComp = td?.LowestSupportedVersion ?? TaskCompatibility.V1;

            if (lowestComp == TaskCompatibility.V1 && task != null && task.Folder.Path != "\\")
            {
                lowestComp = TaskCompatibility.V2;
            }
            switch (comp)
            {
            case TaskCompatibility.AT:
                for (int i = max; i > 1; i--)
                {
                    taskVersionCombo.Items.Add(new ComboItem(versions[i], i, comp >= lowestComp));
                }
                taskVersionCombo.SelectedIndex = taskVersionCombo.Items.Add(new ComboItem(versions[0], 0));
                break;

            default:
                for (int i = max; i > 0; i--)
                {
                    taskVersionCombo.Items.Add(new ComboItem(versions[i], i, comp >= lowestComp));
                }
                taskVersionCombo.SelectedIndex = taskVersionCombo.Items.IndexOf((int)comp);
                break;
            }
            taskVersionCombo.EndUpdate();
        }
        private void taskVersionCombo_SelectedIndexChanged(object sender, EventArgs e)
        {
            IsV2 = taskVersionCombo.SelectedIndex == -1 ? true : ((ComboItem)taskVersionCombo.SelectedItem).Version > 1;
            TaskCompatibility priorSetting = (td != null) ? td.Settings.Compatibility : TaskCompatibility.V1;

            if (!onAssignment && td != null && taskVersionCombo.SelectedIndex != -1)
            {
                td.Settings.Compatibility = (TaskCompatibility)((ComboItem)taskVersionCombo.SelectedItem).Version;
            }

            if ((onAssignment && task == null) || (sender != null && td != null && priorSetting > td.Settings.Compatibility))
            {
                try
                {
                    if (!onAssignment && td != null)
                    {
                        td.Validate(true);
                        ReinitializeControls();
                    }
                }
                catch (InvalidOperationException ex)
                {
                    var msg = new System.Text.StringBuilder();
                    if (ShowErrors)
                    {
                        msg.AppendLine(EditorProperties.Resources.Error_TaskPropertiesIncompatible);
                        foreach (var item in ex.Data.Keys)
                        {
                            msg.AppendLine($"- {item} {ex.Data[item]}");
                        }
                    }
                    else
                    {
                        msg.Append(EditorProperties.Resources.Error_TaskPropertiesIncompatibleSimple);
                    }
                    MessageBox.Show(this, msg.ToString(), EditorProperties.Resources.TaskSchedulerName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    taskVersionCombo.SelectedIndex = taskVersionCombo.Items.IndexOf((int)priorSetting);
                    return;
                }
            }
        }
 internal NotSupportedPriorToException(TaskCompatibility supportedVersion) : base(supportedVersion)
 {
 }
 internal TSNotSupportedException(string message, TaskCompatibility minComp)
 {
     myMessage = message;
     min       = minComp;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="TSNotSupportedException"/> class.
 /// </summary>
 /// <param name="serializationInfo">The serialization information.</param>
 /// <param name="streamingContext">The streaming context.</param>
 protected TSNotSupportedException(SerializationInfo serializationInfo, StreamingContext streamingContext)
     : base(serializationInfo, streamingContext)
 {
     try { min = (TaskCompatibility)serializationInfo.GetValue("min", typeof(TaskCompatibility)); }
     catch { min = TaskCompatibility.V1; }
 }
 internal NotSupportedPriorToException(TaskCompatibility supportedVersion)
     : base(supportedVersion)
 {
 }
 internal TSNotSupportedException(string message, TaskCompatibility minComp)
 {
     myMessage = message;
     min = minComp;
 }
 internal TSNotSupportedException(TaskCompatibility minComp)
 {
     min = minComp;
     StackTrace stackTrace = new StackTrace();
     StackFrame stackFrame = stackTrace.GetFrame(2);
     MethodBase methodBase = stackFrame.GetMethod();
     myMessage = string.Format("{0}.{1} is not supported on {2}", methodBase.DeclaringType.Name, methodBase.Name, this.LibName);
 }