Function RunAsInteractiveUser($FQFN, optional $ARGUMENTS, optional $WORKDIR, optional $TASKNAME, optional $DONOTDELETE)
Dim $SERVICE, $ROOTFOLDER, $TASKDEFINITION, $TRIGGERS, $TRIGGER, $ACTION, $SETTINGS
Dim $TriggerTypeRegistration, $ActionTypeExecutable, $FlagTaskCreate, $LogonTypeInteractive
? "TASK EXECUTE: " + $FQFN ?
? "TASK ARGUMENTS: " + $ARGUMENTS ?
? "TASK WORKING DIRECTORY: " + $WORKDIR ?
? "TASK NAME: " + $TASKNAME ?
? "TASK DELETE: " + $DONOTDELETE ?
? "TASK USERNAME: " + $UPPERUSERNAME ?
;$NUL = PAUSE(15)
If $TASKNAME = ""
$TASKNAME = "Run As Interactive User - " + @ticks
EndIf
$TriggerTypeRegistration = 7
$ActionTypeExecutable = 0
$FlagTaskCreate = 2
$LogonTypeInteractive = 3
If Exist($FQFN)
$SERVICE = CreateObject("Schedule.Service")
$SERVICE.Connect()
$ROOTFOLDER = $SERVICE.GetFolder("\")
$ROOTFOLDER.DeleteTask($TASKNAME, 0)
$TASKDEFINITION = $SERVICE.NewTask(0)
$TRIGGERS = $TASKDEFINITION.Triggers
$TRIGGER = $TRIGGERS.Create($TriggerTypeRegistration)
$SETTINGS = $TASKDEFINITION.Settings
$SETTINGS.DisallowStartIfOnBatteries = NOT 1
$SETTINGS.StopIfGoingOnBatteries = NOT 1
$ACTION = $TASKDEFINITION.Actions.Create($ActionTypeExecutable)
$ACTION.Path = $FQFN
If Exist($ARGUMENTS)
$Action.Arguments = '"' + $ARGUMENTS + '"'
Else
Exit 2
EndIf
If Exist($WORKDIR)
$Action.WorkingDirectory = $WORKDIR
Else
Exit 2
EndIf
$RC = $ROOTFOLDER.RegisterTaskDefinition($TASKNAME, $TASKDEFINITION, $FlagTaskCreate,,, $LogonTypeInteractive)
If NOT $DONOTDELETE
Sleep 1
$ROOTFOLDER.DeleteTask($TASKNAME, 0)
EndIf
Else
Exit 2
EndIf
EndFunction