2010-07-20 10 views
5

Escribí una pequeña aplicación para transferir archivos usando los componentes indy, ahora quiero iniciar el programa antivirus cuando la transferencia haya finalizado para verificar los archivos.Ejecutar el programa antivirus mediante programación usando delphi

cómo puedo ejecutar el programa antivirus instalado en el lado del cliente, cuando termina la descarga?

ACTUALIZACIÓN Necesito implementar algo similar a firefox al descargar un archivo y luego ejecutar el antivirus instalado en la máquina.

gracias de antemano.

+2

No mayoría de los programas antivirus gancho en el sistema de archivos y detectar nuevos archivos de todos modos? –

+0

¿Está preguntando cómo hacer que una aplicación se inicie automáticamente en la computadora del otro usuario (no en la suya)? ¿Estás tratando de hacer un servicio? ¿Escribió un programa antivirus o quiere que el programa antivirus escanee su programa, que no es un programa antivirus? Estoy confundido. –

+0

@Warren P, actualicé mi pregunta. solo necesito escanear un archivo usando el antivirus instalado cuando mi aplicación cliente finalizó la descarga. – Salvador

Respuesta

7

See the nice person's answer to my other question.

Parece que hay dos interfaces COM que debe agarrar, uno de los cuales se documenta aquí:

IAttachmentExecute

Esta interfaz forma parte de las interfaces del shell de Windows.

aquí es el comentario de la fuente

/** 
* Code overview 
* 
* Download scanner attempts to make use of one of two different virus 
* scanning interfaces available on Windows - IOfficeAntiVirus (Windows 
* 95/NT 4 and IE 5) and IAttachmentExecute (XPSP2 and up). The latter 
* interface supports calling IOfficeAntiVirus internally, while also 
* adding support for XPSP2+ ADS forks which define security related 
* prompting on downloaded content. 
* 
* Both interfaces are synchronous and can take a while, so it is not a 
* good idea to call either from the main thread. Some antivirus scanners can 
* take a long time to scan or the call might block while the scanner shows 
* its UI so if the user were to download many files that finished around the 
* same time, they would have to wait a while if the scanning were done on 
* exactly one other thread. Since the overhead of creating a thread is 
* relatively small compared to the time it takes to download a file and scan 
* it, a new thread is spawned for each download that is to be scanned. Since 
* most of the mozilla codebase is not threadsafe, all the information needed 
* for the scanner is gathered in the main thread in nsDownloadScanner::Scan::Start. 
* The only function of nsDownloadScanner::Scan which is invoked on another 
* thread is DoScan. 

I found some more implementation information here. The feature is called AES.

+1

La fuente de C++ que muestra cómo lo hace Firefox está en http://mx.mozilla.org/mozilla1.9.1/source/toolkit/components/downloads/src/nsDownloadScanner.cpp – glob

2

Comprueba cómo lo hacen otros programas, como Winrar. Lo más probable es que solo esté comenzando el programa antivirus con el archivo o la carpeta que desea escanear como un parámetro de línea de comandos. Puede consultar el manual de su programa antivirus para verificar cómo se hace.

0

puede utilizar shellexecute o CreateProcess, yo uso shellexecute pero he oído CreateProcess es mejor si se desea ejecutar un antivirus llamado decir antivvv usando ShellAPI hacerlo de esta manera:

uses ShellApi; 
... 
ShellExecute(Handle, 'open', 'c:\program files\antivvv.exe', nil, nil, SW_SHOWNORMAL) ; 
+2

¿Por qué esto se revocó? –

+0

No soy el único, pero probablemente porque no hace nada para que el AV compruebe un archivo. –

+1

Eso solo depende de las opciones de línea de comando del programa antivirus. -1 parece duro. – Tobiasopdenbrouw

Cuestiones relacionadas