C#创建Windows任务:如何取消勾选‘不存储密码’选项?
解决Windows任务计划“不存储密码”选项取消勾选的问题
要取消勾选“不存储密码。任务将仅能访问本地资源”选项,核心是让任务计划存储用户密码,对应使用TaskLogonType.Password登录类型,同时确保注册任务时正确传递用户名和密码参数。
问题分析
你尝试的几种登录类型中:
ServiceAccount:对应系统内置服务账户(如Local System),这类账户无需密码,该选项状态对其不适用。S4U:正是对应勾选“不存储密码”的场景,任务仅能访问本地资源,不会存储密码。InteractiveTokenOrPassword:需要用户交互式登录,不符合后台任务需求。Password:才是需要存储密码、允许任务访问网络资源的正确类型,但你之前代码中错误将LogonType设为ServiceAccount,导致参数冲突。
修正后的代码
TaskDefinition td = TaskService.Instance.NewTask(); DailyTrigger dt = new DailyTrigger(); dt.StartBoundary = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, task.Hour, task.Minute, 0); dt.DaysInterval = 1; dt.Enabled = true; td.RegistrationInfo.Author = "Me"; td.RegistrationInfo.Description = "MyTask"; td.Actions.Add(new ExecAction(task.ActionPath)); // 设置为Password登录类型,触发系统存储密码,取消“不存储密码”选项 td.Principal.LogonType = TaskLogonType.Password; // 注册任务时传递用户名和密码,确保参数匹配 TaskService.Instance.RootFolder.RegisterTaskDefinition( "MyTask", td, TaskCreation.Create, ConfigurationManager.AppSettings["UserName"], PassWord.Text, TaskLogonType.Password // 显式指定登录类型,与Principal设置保持一致 );
关键说明
- 必须将
td.Principal.LogonType设为TaskLogonType.Password,明确告知任务计划需要存储用户密码。 - 注册任务时必须正确传递用户名和密码,否则密码存储逻辑不生效,任务也无法正常运行。
- 若任务已存在,建议用
TaskCreation.CreateOrUpdate替代TaskCreation.Create,避免重复创建报错。
内容的提问来源于stack exchange,提问作者Itwasbaloo
相关产品推荐
相关产品推荐

