//runAsTask 启动任务 import process; import com; namespace sys; class runAsTask{ ctor(taskName,description,author){ this.taskName = taskName || ..io._exefile; var schedule = ..com.CreateObject("Schedule.Service"); schedule.Connect(); //https://docs.microsoft.com/en-us/windows/win32/taskschd/taskdefinition var definition = schedule.NewTask(0); definition.registrationInfo.Author = author : "Administrator"; definition.registrationInfo.Description = description : ""; definition.principal.LogonType = schedule.TASK_LOGON_GROUP; definition.principal.GroupId = "Builtin\Administrators" definition.principal.RunLevel = schedule.TASK_RUNLEVEL_HIGHEST; //https://docs.microsoft.com/en-us/windows/win32/taskschd/tasksettings definition.settings.StartWhenAvailable = true; definition.settings.Enabled = true definition.settings.Hidden = false definition.settings.DisallowStartIfOnBatteries = false; definition.settings.StopIfGoingOnBatteries = false; definition.settings.MultipleInstances = schedule.TASK_INSTANCES_PARALLEL; definition.settings.AllowHardTerminate = false; definition.settings.RunOnlyIfNetworkAvailable = false; definition.settings.RunOnlyIfIdle = false; definition.settings.AllowDemandStart = true; definition.settings.RestartInterval = "PT1M"; definition.settings.RestartCount = 3; definition.settings.ExecutionTimeLimit = "PT0S"; var trigger = definition.triggers.Create(schedule.TASK_TRIGGER_LOGON); trigger.Enabled = true; trigger.Repetition.StopAtDurationEnd = false; trigger.ExecutionTimeLimit = "PT0S"; this.definition = definition; this.trigger = trigger; this.schedule = schedule; }; get = function(){ var task; var root = this.schedule.GetFolder("\") try{ task = root.GetTask( taskName ); } return task; }; delete = function(){ if(_STUDIO_INVOKED) return; var root = this.schedule.GetFolder("\") try{ root.DeleteTask( taskName ); } }; register = function(arguments,path,workDir){ if(_STUDIO_INVOKED) return; this.delete(); var path = ..io.fullpath(path : ..io._exepath); var act = definition.actions.Create( this.schedule.TASK_ACTION_EXEC ); act.Path = path; act.Arguments = ..process.joinArguments(arguments); act.WorkingDirectory = workDir || ..io.splitpath(path).dir; var root = this.schedule.GetFolder("\") return root.RegisterTaskDefinition(this.taskName, this.definition , this.schedule.TASK_CREATE_OR_UPDATE, , , this.schedule.TASK_LOGON_GROUP); }; } /**intellisense() sys.runAsTask = 用于创建开机启动任务,以管理员权限启动 - 不会出现警告窗口\n\n建议大家不要滥用此功能,\n用户未在设置中主动设置开机启动,请不要自动添加,\n滥用自动开机只会招致用户反感,或被安全软件清除 sys.runAsTask(.(taskName,description,author) = 创建开机启动任务,\n@taskName:计划任务名称\n@description: 计划任务描述\n@author: 创建者名称,可选参数 sys.runAsTask() = !stdSysRunAsTask. !stdSysRunAsTask.taskName = 任务名。\n调用 register 函数指定有效,默认值为 EXE 文件名 !stdSysRunAsTask.trigger.Enabled = 可指定一个布尔值以设置是否允许开机启动。\n调用 register 函数指定有效,默认值为 true !stdSysRunAsTask.delete() = 删除计划任务 !stdSysRunAsTask.register(.(arguments,path,workDir) = 添加计划任务\n@arguments:启动参数,该参数必须是字符串。\n@path:启动的应用程序路径,省略则为当前应用程序路径\n@workdir:启动程序工作目录,可选参数 !stdSysRunAsTask.get() = 返回已注册计划任务。\n返回对象含 Name(名称),Path(路径) 属性。\n如果未注册返回 null end intellisense**/ /**details(说明) 查看计划任务列表: raw.execute("control","schedtasks"); end details**/