Как запланировать задачу программно - PullRequest
7 голосов
/ 02 января 2012

Как мне запланировать задачу, используя delphi 7, например, программу обновления Google?
Я не использую реестр, потому что антивирус Касперского обнаруживает его как ложную тревогу.
Все, что я добавляю в реестр как началоэлемент обнаружен как троян, поэтому я решил использовать расписание задач

Ответы [ 2 ]

7 голосов
/ 03 января 2012

Следующий фрагмент кода показывает, как удалить и создать задачу, которая будет запускать приложение при запуске системы с системными привилегиями.Он использует следующую командную строку:

Однако планировщик задач, поскольку Windows Vista поддерживает принудительное создание задач, я бы не использовал его для обратной совместимости с Windows XP, где этот флаг не существует.Таким образом, приведенный ниже пример пытается удалить задачу (если она уже существует), а затем создать новую.

Он выполняет следующие команды:

schtasks / delete / f /tn "myjob"
schtasks / create / tn "myjob" / tr "C: \ Application.exe" / sc ONSTART / ru "System"

/ delete - удалить задачу
/ f- подавить подтверждение
/ create - создать параметр задачи
/ tn - уникальное имя задачи
/ tr - имя файла исполняемого файла
/ sc - тип расписания, ONSTART - запустить при запуске
/ ru - запускать задачу под разрешениями указанного пользователя

А вот код:

uses
  ShellAPI;

procedure ScheduleRunAtStartup(const ATaskName: string; const AFileName: string;
  const AUserAccount: string);
begin
  ShellExecute(0, nil, 'schtasks', PChar('/delete /f /tn "' + ATaskName + '"'),
    nil, SW_HIDE);
  ShellExecute(0, nil, 'schtasks', PChar('/create /tn "' + ATaskName + '" ' +
    '/tr "' + AFileName + '" /sc ONSTART /ru "' + AUserAccount + '"'),
    nil, SW_HIDE);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ScheduleRunAtStartup('myjob', 'C:\Application.exe', 'System');
end;
0 голосов
/ 03 января 2012

Разобрался, проблема здесь, она прекрасно работает

Проверено на Windows 7 Pro, если бы кто-нибудь может проверить меня на XP PRO, было бы признательно

procedure ScheduleRunAtStartup(const ATaskName: string; const AFileName: string;
  const GetPCName: string ; Const GetPCUser: String);
begin
  ShellExecute(0, nil, 'schtasks', PChar('/delete /f /tn "' + ATaskName + '"'),
    nil, SW_HIDE);
  ShellExecute(0, nil, 'schtasks', PChar('/create /tn "' + ATaskName + '" ' + '/tr "' + QuotedStr(AFileName) + '" /sc ONLOGON /ru "' + GetPCName+'\'+GetPCUser + '"'), nil, SW_HIDE)
end;
...