2010-07-20 9 views
5

Ho scritto una piccola app per trasferire file usando i componenti di indy, ora voglio avviare il programma antivirus quando il trasferimento è finito per controllare i file.Esegui programma antivirus utilizzando delphi

come posso eseguire il programma antivirus installato sul lato client, al termine del download?

UPDATE ho bisogno di implementare qualcosa di simile a Firefox, quando scaricare un file e quindi eseguire l'antivirus installato nella macchina.

grazie in anticipo.

+2

Non maggior parte dei programmi antivirus gancio nel file system e di rilevare nuovi file comunque? –

+0

Stai chiedendo come avviare un'applicazione automaticamente sul computer dell'altro utente (non sul tuo)? Stai cercando di fare un servizio? Hai scritto un programma anti-virus o vuoi fare in modo che il programma anti-virus esegua la scansione del tuo programma che non è un programma anti-virus? Sono confuso. –

+0

@Warren P, ho aggiornato la mia domanda. ho solo bisogno di scansionare un file usando l'antivirus installato quando l'app del mio cliente ha terminato il download. – Salvador

risposta

7

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

sembra che ci sono due interfacce COM si dovrebbe essere grabbing, uno dei quali è documentato qui:

IAttachmentExecute

Questa interfaccia fa parte delle interfacce della shell di Windows.

Pubblichiamo il commento nel sorgente

/** 
* 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 fonte C++ che mostra come funziona Firefox è su http://mxr.mozilla.org/mozilla1.9.1/source/toolkit/components/downloads/src/nsDownloadScanner.cpp – glob

2

Controllare come altri programmi lo fanno, come Winrar. Molto probabilmente è solo l'avvio del programma antivirus con il file o la cartella che si desidera analizzare come parametro della riga di comando. Puoi controllare il manuale del tuo programma antivirus per verificare come è fatto.

0

è possibile utilizzare ShellExecute o CreateProcess, io uso shellexecute ma ho sentito CreateProcess è meglio se si desidera eseguire un antivirus chiamato dire antivvv usando shellapi fare in questo modo:

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

Perché è stato downvoted? –

+0

Non sono io, ma probabilmente perché non fa nulla per fare in modo che l'AV controlli un file. –

+1

Ciò dipende solo dalle opzioni della riga di comando del programma antivirus. -1 sembra duro. – Tobiasopdenbrouw