Inno安装程序更改现有的Windows计划任务以电池供电时运行

时间:2019-02-08 18:43:25

标签: windows scheduled-tasks inno-setup taskscheduler pascalscript

默认情况下,Windows计划任务是在“仅在计算机接通交流电源的情况下才启动任务”设置下创建的。

Scheduled Task

无法使用schtasks.exe更改此设置,这本来是简单的解决方案。但是,似乎可以通过Windows API ITaskSettings::get_DisallowStartIfOnBatteries方法执行此操作。是否可以将其导入到Inno设置中以在现有计划任务上禁用此设置,并允许它在计算机由电池供电时运行?如果是这样,将如何进行?还是有其他方法可以使用Inno Setup更改此设置?

1 个答案:

答案 0 :(得分:1)

实际上,可以使用schtasks设置该选项。您只需要使用任务的XML定义即可。

对于您的特定选项,您需要将DisallowStartIfOnBatteries设置为false

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <!-- ... -->
  <Settings>
    <!-- ... -->
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
  </Settings>
</Task>

有关更多信息,请参见How to add a scheduled task on network connection/disconnection event with Inno Setup


我没有找到使用API​​修改现有任务的方法。这没有任何作用:

var
  TaskService: Variant;
  Folder: Variant;
  Task: Variant;
begin
  TaskService := CreateOleObject('Schedule.Service');
  TaskService.Connect();
  Folder := TaskService.GetFolder('\');
  Task := Folder.GetTask('test');
  Task.Definition.Settings.DisallowStartIfOnBatteries := False;
end;