如何用VB.NET创建启用“以最高权限运行”的计划任务?
解决VB.NET创建计划任务无法设置“以最高权限运行”的问题
问题根源
设置TaskDefinition.Principal.RunLevel报错,通常是因为默认Principal对象未初始化,直接赋值会触发空引用异常;其次,创建需要最高权限的任务,当前程序必须以管理员身份运行。
修正后的代码
Sub VaultProFullBackupTask() Using tService As New TaskService() Dim tDefinition As TaskDefinition = tService.NewTask tDefinition.RegistrationInfo.Description = "Vault Pro Full Backup" tDefinition.Settings.Priority = ProcessPriorityClass.AboveNormal ' 先实例化Principal对象,再设置最高权限运行级别 tDefinition.Principal = New Principal() tDefinition.Principal.RunLevel = TaskRunLevel.Highest Dim tTrigger As New WeeklyTrigger() tTrigger.StartBoundary = DateTime.Today.AddDays(2) tTrigger.DaysOfWeek = DaysOfTheWeek.Monday tTrigger.WeeksInterval = 1 tDefinition.Triggers.Add(tTrigger) tDefinition.Actions.Add(New ExecAction(VaultScriptFolder & "\VaultBackupFull.bat")) ' 注册任务时指定登录类型,确保权限生效 tService.RootFolder.RegisterTaskDefinition( "Vault Pro Full Backup", tDefinition, TaskCreation.CreateOrUpdate, "", "", TaskLogonType.InteractiveToken ) End Using End Sub
关键注意事项
- 必须实例化Principal:默认
TaskDefinition.Principal为Nothing,直接赋值RunLevel会导致空引用错误,需先创建New Principal()。 - 以管理员身份运行程序:创建包含最高权限的计划任务,当前VB.NET程序必须右键选择“以管理员身份运行”,否则会因权限不足注册失败。
- 确认NuGet包引用:如果使用的是
Microsoft.Win32.TaskScheduler库,需确保已通过NuGet安装该包(这是.NET操作计划任务的常用库)。
内容的提问来源于stack exchange,提问作者JRDumont
相关产品推荐
相关产品推荐

