TaskScheduler不通过命令创建任务

问题描述:

我有一个WiX安装程序,其中我有以下自定义操作以在任务计划程序中创建几个任务。TaskScheduler不通过命令创建任务

[CustomAction] 
     public static ActionResult CreateScheduleTaskForUpdateTriggering(Session session) 
     { 
      session.Log("Creating the Scheduled Task"); 
      string MyAppPath = Environment.GetEnvironmentVariable("MyAppPATH"); 
      if (!IsTaskExisting("MyAppUpdateTrigger")) 
      { 
       session.Log("Command Created : " + "C:\\Windows\\System32\\SCHTASKS.exe /Create /TN \"MyAppUpdateTrigger\" /SC ONCE /TR \"" + Path.Combine(new string[] { MyAppPath, "Watchdog", "RunMyAppInstaller.bat" }) + "\" /RL HIGHEST"); 
       Process p = Process.Start("C:\\Windows\\System32\\SCHTASKS.exe", " /Create /TN \"MyAppUpdateTrigger\" /SC ONCE /TR \"" + Path.Combine(new string[] { MyAppPath, "Watchdog", "RunMyAppInstaller.bat" }) + "\" /ST 00:00:00 /SD 01/01/1990 /RL HIGHEST"); 
      } 
      else 
      { 
       session.Log("MyAppUpdateTrigger schedule already exists"); 
      } 
      return ActionResult.Success; 
     } 

     [CustomAction] 
     public static ActionResult CreateScheduleTaskForRunningWatchdog(Session session) 
     { 
      session.Log("Creating the Scheduled Task for running watch dog"); 

      string MyAppPath = Environment.GetEnvironmentVariable("MyAppPATH"); 

      if (!IsTaskExisting("RunWatchDog")) 
      { 
       session.Log("Command Created : " + "C:\\Windows\\System32\\SCHTASKS.exe /Create /TN \"RunWatchDog\" /SC ONSTART /TR \"" + Path.Combine(new string[] { MyAppPath, "Watchdog", "RunWatchDog.bat" }) + "\" /RL HIGHEST"); 
       Process p = Process.Start("C:\\Windows\\System32\\SCHTASKS.exe", " /Create /TN \"RunWatchDog\" /SC ONSTART /TR \"" + Path.Combine(new string[] { MyAppPath, "Watchdog", "RunWatchDog.bat" }) + "\" /ST 00:00:00 /SD 01/01/1990 /RL HIGHEST"); 
      } 
      return ActionResult.Success; 
     } 

我打电话给他们,如下图所示在我的WiX文件中。

<CustomAction Id="CA_scheduleTaskAction" BinaryKey="removeFolderCustomActionDLL" DllEntry="CreateScheduleTaskForUpdateTriggering" Execute="commit" Return="ignore" /> 
<CustomAction Id="CA_scheduleTaskActionForWatchDog" BinaryKey="removeFolderCustomActionDLL" DllEntry="CreateScheduleTaskForRunningWatchdog" Execute="commit" Return="ignore" /> 

<InstallExecuteSequence> 
    <!--Custom Action="LaunchWatchdog" After="InstallFinalize" /--> 
    <Custom Action="WatchDog.TaskKill" Before="InstallValidate"/> 
    <Custom Action="CA_scheduleTaskAction" After="InstallFiles"/> 
    <Custom Action="CA_scheduleTaskAction" After="InstallFiles"/> 
    <Custom Action="CA_myCustomAction" Before="InstallFinalize">Installed</Custom> 
</InstallExecuteSequence> 

尽管第一个计划任务被创建,第二个计划任务却在任务计划程序中丢失。日志确实表明自定义操作已运行。但它在任务调度器中不存在。当我手动运行命令时,它确实被创建。我在这里做错了什么?任何帮助将非常感激。以下是日志。

Calling custom action CustomActionRemoveFolder!CustomActionRemoveFolder.CustomActions.CreateScheduleTaskForRunningWatchdog 
Creating the Scheduled Task for running watch dog 
Command Created : C:\Windows\System32\SCHTASKS.exe /Create /TN "RunWatchDog" /SC ONSTART /TR "C:\Program Files\Kube2.0\Watchdog\RunWatchDog.bat" /RL HIGHEST 
MSI (s) (88:38) [09:42:01:431]: Note: 1: 2318 2: 
MSI (s) (88:38) [09:42:01:431]: No System Restore sequence number for this installation. 
MSI (s) (88:38) [09:42:01:431]: Unlocking Server 
MSI (s) (88:38) [09:42:01:446]: PROPERTY CHANGE: Deleting UpdateStarted property. Its current value is '1'. 
Action ended 9:42:01: InstallFinalize. Return value 1. 
Action ended 9:42:01: INSTALL. Return value 1. 
+0

您是否尝试过更可靠的编程方式? https://msdn.microsoft.com/en-us/library/windows/desktop/aa383448(v=vs.85).aspx – wannadream

+0

我打印了错误代码。这就是我所得到的。 “-2147467259”有什么想法? :( – mayooran

+0

这是一个运行时错误,原因可能会有所不同。很难说。 – wannadream

现在,我明白了。从DOC:https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx

/SC时间表

指定计划频率的值。有效值包括:MINUTE,HOURLY,DAILY,WEEKLY,MONTHLY,ONCE,ONLOGON,ONIDLE和ONEVENT。

+0

哦!我怎么能通过命令行给这个onstart命令?因为其他任务调度程序调度方法需要一些代码更改:( – mayooran

+0

也在这里http://*.com/questions/17438482/set-task-to-run-on-system- startup-schtasks-command-line他们说可以做noh吗? – mayooran

+0

另外,当我通过命令行手动运行这个命令的时候它的工作! – mayooran