Skip to content

Commit 4ea6ab1

Browse files
author
David Hall
committed
Added TaskServiceVersion to help simply library version decoding and converted raw Version class instances in project to use new class members.
1 parent a7a644e commit 4ea6ab1

9 files changed

+55
-30
lines changed

TaskEditor/OptionPanels/GeneralOptionPanel.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private void taskUseUnifiedSchedulingEngineCheck_CheckedChanged(object sender, E
119119
if (td.Actions[i].ActionType == TaskActionType.SendEmail || td.Actions[i].ActionType == TaskActionType.ShowMessage)
120120
td.Actions.RemoveAt(i);
121121
}
122-
if (parent.TaskService != null && parent.TaskService.HighestSupportedVersion == new Version(1, 3))
122+
if (parent.TaskService != null && parent.TaskService.HighestSupportedVersion == TaskServiceVersion.V1_3)
123123
for (int i = td.Triggers.Count - 1; i >= 0; i--)
124124
{
125125
if (td.Triggers[i].TriggerType == TaskTriggerType.Monthly || td.Triggers[i].TriggerType == TaskTriggerType.MonthlyDOW)

TaskEditor/OptionPanels/StartupOptionPanel.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ protected override void InitializePanel()
2626
bool v2 = parent.IsV2;
2727
taskStopIfGoingOnBatteriesCheck.Enabled = editable && td.Settings.DisallowStartIfOnBatteries;
2828
taskStartIfConnectionCheck.Enabled = editable && v2;
29-
availableConnectionsCombo.Enabled = editable && v2 && td.Settings.RunOnlyIfNetworkAvailable && ((parent.TaskService != null && parent.TaskService.HighestSupportedVersion < new Version(1, 5)) || !td.Settings.UseUnifiedSchedulingEngine);
29+
availableConnectionsCombo.Enabled = editable && v2 && td.Settings.RunOnlyIfNetworkAvailable && ((parent.TaskService != null && parent.TaskService.HighestSupportedVersion < TaskServiceVersion.V1_5) || !td.Settings.UseUnifiedSchedulingEngine);
3030
taskDisallowStartOnRemoteAppSessionCheck.Enabled = editable && td.Settings.Compatibility >= TaskCompatibility.V2_1;
3131

3232
taskRestartOnIdleCheck.Checked = td.Settings.IdleSettings.RestartOnIdle;
@@ -112,7 +112,7 @@ private void taskWakeToRunCheck_CheckedChanged(object sender, EventArgs e)
112112

113113
private void taskStartIfConnectionCheck_CheckedChanged(object sender, EventArgs e)
114114
{
115-
availableConnectionsCombo.Enabled = parent.Editable && taskStartIfConnectionCheck.Checked && ((parent.TaskService != null && parent.TaskService.HighestSupportedVersion < new Version(1, 5)) || !td.Settings.UseUnifiedSchedulingEngine);
115+
availableConnectionsCombo.Enabled = parent.Editable && taskStartIfConnectionCheck.Checked && ((parent.TaskService != null && parent.TaskService.HighestSupportedVersion < TaskServiceVersion.V1_5) || !td.Settings.UseUnifiedSchedulingEngine);
116116
if (!onAssignment)
117117
td.Settings.RunOnlyIfNetworkAvailable = taskStartIfConnectionCheck.Checked;
118118
}

TaskEditor/TaskOptionsEditor.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ private set
202202
UpdateAvailableTriggers(AvailableTriggers);
203203
SetVersionComboItems();
204204
IsV2 = td.Settings.Compatibility >= TaskCompatibility.V2 &&
205-
TaskService.HighestSupportedVersion >= new Version(1, 2);
205+
TaskService.HighestSupportedVersion >= TaskServiceVersion.V1_2;
206206
taskNameText.Text = task?.Name ?? string.Empty;
207207
ReinitializeControls();
208208
onAssignment = false;
@@ -269,7 +269,7 @@ public void Initialize(TaskService service, TaskDefinition td = null, string tas
269269
if (td == null)
270270
{
271271
var temp = service.NewTask();
272-
if (service.HighestSupportedVersion == new Version(1, 1))
272+
if (service.HighestSupportedVersion == TaskServiceVersion.V1_1)
273273
temp.Settings.Compatibility = TaskCompatibility.V1;
274274
TaskDefinition = temp;
275275
}

TaskEditor/TaskPropertiesControl.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ private set
364364
UpdateAvailableActions(AvailableActions);
365365
UpdateAvailableTriggers(AvailableTriggers);
366366
SetVersionComboItems();
367-
IsV2 = td.Settings.Compatibility >= TaskCompatibility.V2 && TaskService.HighestSupportedVersion >= new Version(1, 2);
367+
IsV2 = td.Settings.Compatibility >= TaskCompatibility.V2 && TaskService.HighestSupportedVersion >= TaskServiceVersion.V1_2;
368368

369369
tabControl.SelectedIndex = 0;
370370

@@ -513,7 +513,7 @@ public void Initialize(TaskService service, TaskDefinition taskDef = null, strin
513513
if (taskDef == null)
514514
{
515515
var temp = service.NewTask();
516-
if (service.HighestSupportedVersion == new Version(1, 1))
516+
if (service.HighestSupportedVersion == TaskServiceVersion.V1_1)
517517
temp.Settings.Compatibility = TaskCompatibility.V1;
518518
TaskDefinition = temp;
519519
}
@@ -629,7 +629,7 @@ private void generalTab_Enter(object sender, EventArgs e)
629629

630630
private string GetTaskLocation()
631631
{
632-
if (task == null || TaskService.HighestSupportedVersion.CompareTo(new Version(1, 1)) == 0)
632+
if (task == null || TaskService.HighestSupportedVersion.CompareTo(TaskServiceVersion.V1_1) == 0)
633633
return @"\";
634634
return Path.GetDirectoryName(task.Path);
635635
}
@@ -780,7 +780,7 @@ private void ResetForUnifiedSchedulingEngine()
780780
actionCollectionUI.RefreshState();
781781
}
782782
}
783-
if (TaskService != null && TaskService.HighestSupportedVersion == new Version(1, 3))
783+
if (TaskService != null && TaskService.HighestSupportedVersion == TaskServiceVersion.V1_3)
784784
for (var i = td.Triggers.Count - 1; i >= 0; i--)
785785
{
786786
if (td.Triggers[i].TriggerType == TaskTriggerType.Monthly || td.Triggers[i].TriggerType == TaskTriggerType.MonthlyDOW)
@@ -1294,7 +1294,7 @@ private void taskRunLevelCheck_CheckedChanged(object sender, EventArgs e)
12941294

12951295
private void taskStartIfConnectionCheck_CheckedChanged(object sender, EventArgs e)
12961296
{
1297-
availableConnectionsCombo.Enabled = editable && taskStartIfConnectionCheck.Checked && ((TaskService != null && TaskService.HighestSupportedVersion < new Version(1,5)) || !taskUseUnifiedSchedulingEngineCheck.Checked);
1297+
availableConnectionsCombo.Enabled = editable && taskStartIfConnectionCheck.Checked && ((TaskService != null && TaskService.HighestSupportedVersion < TaskServiceVersion.V1_5) || !taskUseUnifiedSchedulingEngineCheck.Checked);
12981298
if (!onAssignment)
12991299
td.Settings.RunOnlyIfNetworkAvailable = taskStartIfConnectionCheck.Checked;
13001300
}
@@ -1386,7 +1386,7 @@ private void taskVersionCombo_SelectedIndexChanged(object sender, EventArgs e)
13861386
taskAllowHardTerminateCheck.Enabled = taskRunningRuleLabel.Enabled = taskMultInstCombo.Enabled =
13871387
taskStartIfConnectionCheck.Enabled = taskRegSDDLText.Enabled = editable && v2;
13881388
taskRestartIntervalCombo.Enabled = taskRestartCountLabel.Enabled = taskRestartCountText.Enabled = v2 && editable && taskRestartIntervalCheck.Checked;
1389-
availableConnectionsCombo.Enabled = editable && v2 && taskStartIfConnectionCheck.Checked && ((TaskService != null && TaskService.HighestSupportedVersion < new Version(1, 5)) || !taskUseUnifiedSchedulingEngineCheck.Checked);
1389+
availableConnectionsCombo.Enabled = editable && v2 && taskStartIfConnectionCheck.Checked && ((TaskService != null && TaskService.HighestSupportedVersion < TaskServiceVersion.V1_5) || !taskUseUnifiedSchedulingEngineCheck.Checked);
13901390
principalSIDTypeLabel.Enabled = principalSIDTypeCombo.Enabled = principalReqPrivilegesLabel.Enabled =
13911391
principalReqPrivilegesDropDown.Enabled = taskDisallowStartOnRemoteAppSessionCheck.Enabled =
13921392
taskUseUnifiedSchedulingEngineCheck.Enabled = editable && v2_1;
@@ -1429,7 +1429,7 @@ private void UpdateUnifiedSchedulingEngineControls()
14291429
var isSet = taskUseUnifiedSchedulingEngineCheck.Checked;
14301430
var alreadyOnAssigment = onAssignment;
14311431
onAssignment = true;
1432-
availableConnectionsCombo.Enabled = editable && taskStartIfConnectionCheck.Checked && ((TaskService != null && TaskService.HighestSupportedVersion < new Version(1, 5)) || !taskUseUnifiedSchedulingEngineCheck.Checked);
1432+
availableConnectionsCombo.Enabled = editable && taskStartIfConnectionCheck.Checked && ((TaskService != null && TaskService.HighestSupportedVersion < TaskServiceVersion.V1_5) || !taskUseUnifiedSchedulingEngineCheck.Checked);
14331433
//taskAllowHardTerminateCheck.Enabled = editable && !isSet;
14341434
// Update Multiple Instances policy combo
14351435
/*taskMultInstCombo.BeginUpdate();

TaskEditor/TaskSchedulerWizard.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ public TaskDefinition TaskDefinition
357357

358358
td = value;
359359
onAssignment = true;
360-
IsV2 = TaskService.HighestSupportedVersion >= (new Version(1, 2)) && td.Settings.Compatibility >= TaskCompatibility.V2;
360+
IsV2 = TaskService.HighestSupportedVersion >= (TaskServiceVersion.V1_2) && td.Settings.Compatibility >= TaskCompatibility.V2;
361361

362362
// Set General tab
363363
if (task != null) nameText.Text = task.Name;
@@ -532,7 +532,7 @@ public void Initialize(TaskService service, TaskDefinition td = null)
532532
if (td == null)
533533
{
534534
TaskDefinition = service.NewTask();
535-
IsV2 = TaskService.HighestSupportedVersion >= (new Version(1, 2));
535+
IsV2 = TaskService.HighestSupportedVersion >= TaskServiceVersion.V1_2;
536536
}
537537
else
538538
{
@@ -1090,7 +1090,7 @@ private void wizardControl1_Finished(object sender, System.EventArgs e)
10901090
if (RegisterTaskOnFinish)
10911091
{
10921092
TaskFolder fld = TaskService.RootFolder;
1093-
if (!string.IsNullOrEmpty(TaskFolder) && TaskService.HighestSupportedVersion.CompareTo(new Version(1, 1)) != 0)
1093+
if (!string.IsNullOrEmpty(TaskFolder) && TaskService.HighestSupportedVersion.CompareTo(TaskServiceVersion.V1_1) != 0)
10941094
fld = TaskService.GetFolder(TaskFolder);
10951095
task = fld.RegisterTaskDefinition(TaskName, td, TaskCreation.CreateOrUpdate, td.Principal.ToString(), Password, td.Principal.LogonType);
10961096
}

TaskEditor/TaskServiceConnectDialog.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public TaskService TaskService
8989
User = value.UserName;
9090
Domain = value.UserAccountDomain;
9191
Password = value.UserPassword;
92-
v1Check.Checked = ForceV1 = value.HighestSupportedVersion <= new Version(1, 1);
92+
v1Check.Checked = ForceV1 = value.HighestSupportedVersion <= TaskServiceVersion.V1_1;
9393

9494
if (TargetServer == null && User == null)
9595
{

TaskEditor/TaskServiceExtensions.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public static AvailableActions GetFilteredAvailableActions(this TaskService ts,
2525
internal static AvailableActions GetFilteredAvailableActions(AvailableActions availableActions, Version tsVer, bool useUnifiedSchedulingEngine, PowerShellActionPlatformOption psOption)
2626
{
2727
var ret = availableActions;
28-
var isV1 = tsVer < new Version(1, 2);
29-
var isAfter7 = tsVer > new Version(1, 3);
30-
var isWin7 = tsVer == new Version(1, 3);
28+
var isV1 = tsVer < TaskServiceVersion.V1_2;
29+
var isAfter7 = tsVer > TaskServiceVersion.V1_3;
30+
var isWin7 = tsVer == TaskServiceVersion.V1_3;
3131
// ComHandler not supported in V1
3232
if (isV1)
3333
ret &= ~AvailableActions.ComHandler;
@@ -59,7 +59,7 @@ public static AvailableTriggers GetFilteredAvailableTriggers(this TaskService ts
5959

6060
internal static AvailableTriggers GetFilteredAvailableTriggers(AvailableTriggers availableTriggers, Version tsVer, bool useUnifiedSchedulingEngine, bool showCustom)
6161
{
62-
var isV1 = tsVer < new Version(1, 2);
62+
var isV1 = tsVer < TaskServiceVersion.V1_2;
6363
var ret = availableTriggers;
6464
// Remove all non-V1 triggers if set
6565
if (isV1)
@@ -68,7 +68,7 @@ internal static AvailableTriggers GetFilteredAvailableTriggers(AvailableTriggers
6868
if (!showCustom || isV1)
6969
ret &= ~AvailableTriggers.Custom;
7070
// Remove unsupported USE triggers only on Win7
71-
if (useUnifiedSchedulingEngine && tsVer == new Version(1, 3))
71+
if (useUnifiedSchedulingEngine && tsVer == TaskServiceVersion.V1_3)
7272
ret &= ~(AvailableTriggers.Monthly | AvailableTriggers.MonthlyDOW);
7373
return ret != 0 ? ret : throw new InvalidOperationException("No triggers are available to display given the current settings.");
7474
}

TaskService/Task.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1834,7 +1834,7 @@ public static XmlSchemaComplexType GetV1SchemaFile([NotNull] XmlSchemaSet xs)
18341834
public bool CanUseUnifiedSchedulingEngine(bool throwExceptionWithDetails = false, Version taskSchedulerVersion = null)
18351835
{
18361836
var tsVer = taskSchedulerVersion ?? TaskService.LibraryVersion;
1837-
if (tsVer < new Version(1, 3)) return false;
1837+
if (tsVer < TaskServiceVersion.V1_3) return false;
18381838
var ex = new InvalidOperationException { HelpLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa384138(v=vs.85).aspx" };
18391839
var bad = false;
18401840
/*if (Principal.LogonType == TaskLogonType.InteractiveTokenOrPassword)
@@ -1849,7 +1849,7 @@ public bool CanUseUnifiedSchedulingEngine(bool throwExceptionWithDetails = false
18491849
if (!throwExceptionWithDetails) return false;
18501850
TryAdd(ex.Data, "Settings.MultipleInstances", "== TaskInstancesPolicy.StopExisting");
18511851
}*/
1852-
if (Settings.NetworkSettings.Id != Guid.Empty && tsVer >= new Version(1,5))
1852+
if (Settings.NetworkSettings.Id != Guid.Empty && tsVer >= TaskServiceVersion.V1_5)
18531853
{
18541854
bad = true;
18551855
if (!throwExceptionWithDetails) return false;
@@ -1879,7 +1879,7 @@ public bool CanUseUnifiedSchedulingEngine(bool throwExceptionWithDetails = false
18791879
break;
18801880
}
18811881
}
1882-
if (tsVer == new Version(1,3))
1882+
if (tsVer == TaskServiceVersion.V1_3)
18831883
for (var i = 0; i < Triggers.Count; i++)
18841884
{
18851885
Trigger t;

TaskService/TaskService.cs

+31-6
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public sealed partial class TaskService : Component, ISupportInitialize, System.
4545
{
4646
internal static readonly bool LibraryIsV2 = Environment.OSVersion.Version.Major >= 6;
4747
internal static readonly Guid PowerShellActionGuid = new Guid("dab4c1e3-cd12-46f1-96fc-3981143c9bab");
48-
private static readonly Version v1Ver = new Version(1, 1);
48+
private static readonly Version v1Ver = TaskServiceVersion.V1_1;
4949
private static Guid CLSID_Ctask = typeof(V1Interop.CTask).GUID;
5050
private static Guid IID_ITask = typeof(V1Interop.ITask).GUID;
5151
[ThreadStatic]
@@ -708,26 +708,26 @@ private static Version GetLibraryVersionFromLocalOS()
708708
{
709709
var fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(Path.Combine(System.Environment.SystemDirectory, "taskschd.dll"));
710710
if (fvi.FileMajorPart == 10)
711-
osLibVer = new Version(1, 5);
711+
osLibVer = TaskServiceVersion.V1_5;
712712
else if (fvi.FileMajorPart == 6)
713713
{
714714
switch (fvi.FileMinorPart)
715715
{
716716
case 0:
717-
osLibVer = new Version(1, 2);
717+
osLibVer = TaskServiceVersion.V1_2;
718718
break;
719719

720720
case 1:
721-
osLibVer = new Version(1, 3);
721+
osLibVer = TaskServiceVersion.V1_3;
722722
break;
723723

724724
case 2:
725725
case 3:
726-
osLibVer = new Version(1, 4);
726+
osLibVer = TaskServiceVersion.V1_4;
727727
break;
728728

729729
case 4:
730-
osLibVer = new Version(1, 5);
730+
osLibVer = TaskServiceVersion.V1_5;
731731
break;
732732
}
733733
}
@@ -1031,4 +1031,29 @@ public override object ConvertFrom(ITypeDescriptorContext context, System.Global
10311031
}
10321032
}
10331033
}
1034+
1035+
/// <summary>
1036+
/// Known versions of the native Task Scheduler library. This can be used as a decoder for the <see cref="TaskService.HighestSupportedVersion"/> and <see cref="TaskService.LibraryVersion"/> values.
1037+
/// </summary>
1038+
public static class TaskServiceVersion
1039+
{
1040+
/// <summary>Task Scheduler 1.0 (Windows Server™ 2003, Windows® XP, or Windows® 2000).</summary>
1041+
[Description("Task Scheduler 1.0 (Windows Server™ 2003, Windows® XP, or Windows® 2000).")]
1042+
public static readonly Version V1_1 = new Version(1, 1);
1043+
/// <summary>Task Scheduler 2.0 (Windows Vista™, Windows Server™ 2008).</summary>
1044+
[Description("Task Scheduler 2.0 (Windows Vista™, Windows Server™ 2008).")]
1045+
public static readonly Version V1_2 = new Version(1, 2);
1046+
/// <summary>Task Scheduler 2.1 (Windows® 7, Windows Server™ 2008 R2).</summary>
1047+
[Description("Task Scheduler 2.1 (Windows® 7, Windows Server™ 2008 R2).")]
1048+
public static readonly Version V1_3 = new Version(1, 3);
1049+
/// <summary>Task Scheduler 2.2 (Windows® 8.x, Windows Server™ 2012).</summary>
1050+
[Description("Task Scheduler 2.2 (Windows® 8.x, Windows Server™ 2012).")]
1051+
public static readonly Version V1_4 = new Version(1, 4);
1052+
/// <summary>Task Scheduler 2.3 (Windows® 10, Windows Server™ 2016).</summary>
1053+
[Description("Task Scheduler 2.3 (Windows® 10, Windows Server™ 2016).")]
1054+
public static readonly Version V1_5 = new Version(1, 5);
1055+
/// <summary>Task Scheduler 2.3 (Windows® 10, Windows Server™ 2016 post build 1703).</summary>
1056+
[Description("Task Scheduler 2.3 (Windows® 10, Windows Server™ 2016 post build 1703).")]
1057+
public static readonly Version V1_6 = new Version(1, 6);
1058+
}
10341059
}

0 commit comments

Comments
 (0)