【问题标题】:Inno Setup change an existing Windows Scheduled Task to run when on battery powerInno Setup 将现有的 Windows 计划任务更改为在电池供电时运行
【发布时间】:2019-02-08 18:43:25
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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;
    

    【讨论】:

    • 也许我应该在问题中更清楚,并说我已经知道schtasks.exe 的 XML 选项。这样做的问题是,它仅在您创建新的计划任务时才真正有用,而不是在您尝试更改现有任务时。
    • 这实际上可能有效。要将任务导出为 XML(假设可以从命令行完成),请删除原始任务,在代码中编辑 XML 并重新创建它。然而,这似乎是一种相当复杂的方式。
    • 要导出现有任务的 XML,请使用 schtasks /query /tn "name" /xml one
    • 没有其他更优雅的方法吗?这似乎是一种非常复杂的实现方式。
    • 我没有找到修改现有任务设置的方法。请参阅我的更新答案。
    猜你喜欢
    • 2021-08-20
    • 2012-02-22
    • 2012-01-25
    • 2012-08-28
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多