2012-01-02 4 views
7

Come posso pianificare un'attività utilizzando delphi 7 come l'aggiornamento di Google?
Non sto usando il registro perché viene rilevato dall'antivirus Kaspersky come falso allarme.
Qualsiasi cosa aggiungo nel registro come elemento di avvio viene rilevato come un cavallo di Troia quindi ho deciso di utilizzare il piano attivitàCome programmare un'attività a livello di programmazione

+3

Utilizzare l'API [Utilità di pianificazione] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383614 (v = vs.85) .aspx). La documentazione MSDN a cui collego contiene molti esempi. –

+1

Ci si deve chiedere perché si viene contrassegnati come un cavallo di Troia. Forse c'è un problema reale. –

+0

well prog non è affatto dannoso per la sua semplicissima applicazione, ma Kasper-sky rileva l'applicazione come Trojan se si utilizza ** RegSetValueEx Software \ Microsoft \ Windows \ CurrentVersion \ Run ** per impostare il registro in qualsiasi punto del codice. API del programma di utilità di pianificazione hai qualche esempio in esecuzione per Delphi? – user1023395

risposta

6

Il seguente pezzo di codice mostra come eliminare e creare l'attività che eseguirà l'applicazione sul sistema avvio con privilegi di sistema. Utilizza la seguente riga di comando:

Tuttavia l'Utilità di pianificazione dal momento che Windows Vista supporta la creazione forzata di attività, non la userei per compatibilità con Windows XP, laddove questo flag non esiste. Quindi l'esempio seguente tenta di eliminare l'attività (se già esiste) e quindi di crearne una nuova.

esegue questi comandi:

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

/cancellare - eliminare l'attività
/f - sopprimere la conferma
/creare - creare parametro compito
/tn - nome univoco del compito
/TR - nome di file di un file eseguibile
/sc - tipo di pianificazione, ONSTART - eseguire all'avvio
/ru - eseguire compito sotto autorizzazioni dell'utente specificato

Ed ecco il codice:

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

Bene, con successo AGGIUNGI in attività pianificata ma non esegui ESEGUI all'avvio di Windows, spero che il mio (antivirus kaspersky) non blocchi l'attività pianificata. Cosa fare ? Ho provato a sostituire l'utente "sistema" mentre il mio attuale utente ha effettuato l'accesso ma non ha ancora funzionato. – user1023395

+0

@ user1023395: Se si desidera utilizzare il proprio account utente, sarà necessario fornire anche la password corrispondente (utilizzando l'opzione di comando '/ RP'). Se il tuo account non ha ancora una password, dovrai assegnarlo. (Un account utente senza password non può essere utilizzato con la pianificazione.) –

+0

Confesso che non ho provato se l'applicazione è stata eseguita (non ho molta esperienza con le attività pianificate), ho provato solo se sono state create. E @AndriyM ha ragione, dovrai o avere e conoscere la password dell'account o modificare le impostazioni del registro. Uno è chiaro, le attività programmate senza questa protezione con password rappresenterebbero un grosso ostacolo alla sicurezza del sistema. – TLama

-1

capito il problema qui funziona benissimo

testato su Windows 7 Pro se uno può provare per me su XP PRO sarebbe b apprezzato

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

L'ho provato su Windows XP Professional SP3, ma no, non funziona senza password. È lo stesso come se si crea un'attività pianificata tramite la Procedura guidata attività pianificata. Quando ho finito la procedura guidata ho ricevuto il messaggio di avviso 'La nuova attività è stata creata, ma potrebbe non essere eseguita perché non è possibile impostare le informazioni sull'account. L'errore specifico è: 0x80070005: accesso negato. E sono un amministratore senza password su quella macchina. Quindi, davvero, se non hai una password impostata sul tuo account, allora non funzionerà. Sarebbe un rischio molto alto per la sicurezza del tuo sistema. – TLama

+2

Questa non è una risposta. Dovresti indicare * perché * è una risposta invece di schiaffeggiare un po 'di codice (e chiedere ad altri di testarlo su altre piattaforme lo rende anche * più * non una risposta. – casperOne

+0

senza quotedstr (AFileName) imposta path come parametro non eseguirà il test dell'applicazione su Windows 7 @TLAMA sostituirà ONSTART con ONLOGON – user1023395