2012-01-02 32 views
7

¿Cómo puedo programar una tarea usando delphi 7 como Google updater?
No estoy usando el registro porque el antivirus Kaspersky lo detecta como una falsa alarma.
Todo lo que agregue en el registro como elemento de arranque se detecta como troyano, así que decidí usar el programa de tareasCómo programar una tarea mediante programación

+3

Utilice la API [Programador de tareas] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383614 (v = vs.85) .aspx). La documentación de MSDN a la que enlace contiene muchos ejemplos. –

+1

Uno tiene que preguntarse por qué está siendo marcado como un troyano. Tal vez hay un problema real. –

+0

bien prog no es dañino en absoluto su aplicación muy simple pero Kasper-sky detecta la aplicación como troyano si usa ** RegSetValueEx Software \ Microsoft \ Windows \ CurrentVersion \ Run ** para configurar el registro en cualquier lugar del código. API del programador de tareas ¿tiene algún ejemplo en ejecución para Delphi? – user1023395

Respuesta

6

El siguiente fragmento de código muestra cómo eliminar y crear la tarea que ejecutará la aplicación en el sistema inicio con privilegios de sistema. Utiliza la siguiente línea de comando:

Sin embargo, el Programador de tareas desde Windows Vista admite la creación forzada de tareas, no lo usaría para compatibilidad con Windows XP, donde este indicador no existe. El siguiente ejemplo intenta eliminar la tarea (si ya existe) y luego crea la nueva.

ejecuta estos comandos:

schtasks/borrar/f/tn "myjob"
schtasks/crear/tn "myjob"/tr "C: \ aplicación.exe"/sc ONSTART/"Sistema" ru

/eliminar - eliminar la tarea
/f - suprimir la confirmación
/crear - crear parámetro de tarea
/tn - nombre único de la tarea
/tr - nombre de archivo de un archivo ejecutable
/sc - tipo de programación, ONSTART - ejecutarse en el inicio
/ru - tarea se ejecute en los permisos del usuario especificado

Y aquí está el código:

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

Bueno, se completó satisfactoriamente en la tarea programada, pero no se ejecutará en Windows, espero que mi (kaspersky antivirus) no bloquee la tarea programada. qué hacer ? Traté de reemplazar al usuario del "sistema" porque mi usuario actual inició sesión pero aún falló. – user1023395

+0

@ user1023395: si desea usar su propia cuenta de usuario, también deberá proporcionar la contraseña correspondiente (utilizando el interruptor de comando '/ RP'). Si su cuenta todavía no tiene una contraseña, tendrá que asignarla. (No se puede usar una cuenta de usuario sin contraseña con la programación.) –

+0

Confieso que no he probado si la aplicación se ejecuta (no tengo mucha experiencia con tareas programadas), solo la he probado si se han creado. Y @AndriyM tiene razón, tendrá que tener y conocer la contraseña de la cuenta o modificar la configuración del registro. Una es clara, las tareas programadas sin esta protección de contraseña serían un gran agujero para la seguridad de su sistema. – TLama

-1

averiguado el problema aquí es que funciona bien

probado en windows 7 Pro si alguien puede probar para mí en XP PRO sería apreciada ayb

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

Lo he intentado en Windows XP Professional SP3, pero no, no funciona sin contraseña. Es lo mismo que si creara una tarea programada a través del Asistente de tareas programadas. Cuando terminé el asistente, recibí el mensaje de advertencia 'La nueva tarea se ha creado, pero no se puede ejecutar porque no se pudo establecer la información de la cuenta. El error específico es: 0x80070005: Acceso denegado. Y soy administrador sin contraseña en esa máquina. Entonces, realmente, si no tienes una contraseña establecida en tu cuenta, entonces no funcionará. Sería un riesgo de seguridad muy alto para su sistema. – TLama

+2

Esto no es una respuesta. Debería indicar * por qué * es una respuesta en lugar de simplemente borrar un código (y pedirle a otros que lo prueben en otras plataformas lo hace incluso * más * no una respuesta. – casperOne

+0

sin quotedstr (AFileName) estableció la ruta como parámetro para que no ejecutaría la prueba de aplicación en Windows 7 @TLAMA reemplazar ONSTART con ONLOGON – user1023395

Cuestiones relacionadas