2012-01-02 5 views
7

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

+3

Используйте [Планировщик заданий] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383614 (v = vs.85) .aspx) API. Документация MSDN, на которую я ссылаюсь, содержит много примеров. –

+1

Нужно задаться вопросом, почему вы попадаете в качестве трояна. Возможно, есть реальная проблема. –

+0

прог не вреден при его очень простом применении, но приложение Kasper-sky обнаруживает в качестве троянца, если используется ** RegSetValueEx Software \ Microsoft \ Windows \ CurrentVersion \ Run **, чтобы установить реестр в любом месте в коде. API планировщика задач у вас есть какой-нибудь пример для Delphi? – user1023395

ответ

6

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

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

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

Schtasks/удалить/F/тн "myjob"
Schtasks/создать/т "myjob"/тр "C: \ application.exe"/СБН OnStart/ру «система»

/удалить - удалить задачу
/с - подавить в подтверждении
/создать - создать параметр задачи
/тн - уникальное имя задачи
/тр - имя файла исполняемого файла
/СБН - тип расписания, 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

Ну, это успешно ADD в запланированной задаче, но не будет запускаться при запуске Windows. Надеюсь, что мой (антивирус Касперского) не блокирует запланированную задачу. что делать ? я попытался заменить «системного» пользователя, поскольку мой текущий пользователь вошел в систему, но все еще не удалось. – user1023395

+0

@ user1023395: Если вы хотите использовать свою собственную учетную запись пользователя, вам также необходимо предоставить соответствующий пароль (с помощью командного переключателя '/ RP'). Если у вашей учетной записи еще нет пароля, вам придется назначить его. (Учетная запись без пароля не может использоваться с планированием.) –

+0

Я признаюсь, что не проверял, выполнено ли приложение (у меня мало опыта работы с запланированными задачами), я тестировал только в том случае, если они созданы. И @AndriyM прав, вам придется либо знать пароль в учетной записи, либо изменять настройки реестра. Один из них - четкие, запланированные задачи без этой защиты паролем - это одна большая дыра для вашей системы безопасности. – TLama

-1

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

Испытано на окнах 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; 
+0

Я пробовал это на Windows XP Professional SP3, но нет, он не работает без пароля. Это то же самое, как если бы вы создавали запланированную задачу с помощью Мастера запланированных заданий. Когда я закончил мастер, я получил предупреждающее сообщение «Новая задача была создана, но может не выполняться, потому что данные учетной записи не могут быть установлены. Конкретная ошибка: 0x80070005: доступ запрещен. «И я администратор без пароля на этой машине. Так что, если у вас нет пароля, установленного в вашей учетной записи, это не сработает. Это будет очень высокий риск для вашей системы. – TLama

+2

Это не ответ. Вы должны указать * почему * это ответ, а не просто похлопывать какой-то код вниз (и просить других протестировать его на других платформах, делает его еще * больше * не ответом.) – casperOne

+0

без quotedstr (AFileName) он задал путь как параметр, чтобы он не будет запускать тест приложения на Windows 7 @TLAMA заменить ONSTART на ONLOGON – user1023395

Смежные вопросы