Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Chiusura processo c#
Forum - C# / VB.NET - Chiusura processo c#

Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 20:10
Lunedì, 11/07/2011
Salve a tutti!

Ho un problema con un programma che sto creando , questo programma data una lista fornita dall'utente (una specie di blacklist) ogni volta che si apre un programma presente nella lista deve killarlo il problema è solo 1:

io avevo pensato a fare un ciclo infinito che duri tutta la durata del mio programma e controllare ad ogni ciclo tutti i programmi aperti per verificare se sono presenti nella lista solo che secondo me potrebbe rallentare molto il computer :-| , cosi volevo sapere se esiste un evento che si verifica tutte le volte che un programma parte nel computer in questo modo controllo il nome dell'applicazione con quella della blacklist e la chiudo senza lasciare un ciclo infinito ! :D

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 20:18
Lunedì, 11/07/2011
Non è affatto semplice, ma questo

http://www.nektra.com/products/deviare-api-hook-windows/

mi sembra ottimo ...

L'utilizzo di quella dll non è male anzi mi sembra buona solo che non mi andava di utilizzare componenti di terzi nel programma, piuttosto implemento in qualche modo hook della funzione createprocess - jaco94++ - 12/07/11 09:40


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 21:45
Lunedì, 11/07/2011
secondo me basterebbe fare così:

con un timer ogni secondo esegui il comando dos tasklist redirigendo l'output dove preferisci. Esamini la lista sotto forma di stringa e vedi se il processo è nella tua blacklist.

Non dovrebbe appesantire troppo il sistema e mi pare che un controllo ogni secondo basti ed avanzi no? Puoi anche aumentare il tempo di attesa tanto non cambia molto...

Sì, anche secondo me, ma lui già aveva presente il metodo e non voleva utilizzarlo ... - nessuno - 11/07/11 22:10
La mia idea infatti era più o meno la stessa solo che avrei usato un nuovo thread con all'interno un ciclo infinito che controlla ogni volta tutte le applicazioni aperte e le confronta con la black list! solo che secondo me potrebbe rallentare di molto! - jaco94++ - 12/07/11 09:19
PM
Avatar
kopiro91 (Member)
Newbie


Messaggi: 20
Iscritto: 23/07/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 18:58
Martedì, 12/07/2011
usa la classe System.Diagnostics.Process, e se non sabaglio ci dovrebbe essere la funzione GetProcesses():

Non è questo il problema. Il fatto è che la lista deve essere fatta ad intervalli regolari per capire se è variato qualcosa. Infatti, si parlava di gestire un ciclo o di fare diversamente (in base ad un hook di sistema sulle API CreateProcess e le altre per la gestione dei processi). - nessuno - 12/07/11 19:29
PM
Avatar
BionicGod (Normal User)
Rookie


Messaggi: 33
Iscritto: 16/06/2011

Up
-2
Down
V
Segnala al moderatore
Postato alle 19:41
Martedì, 12/07/2011
Crei un thread che ogni x millisecondi termina il processo se in esecuzione.
System.Threading.Thread <--- Questa classe devi studiare

Vale quanto detto per kopiro ... è comunque un ciclo ed è quello che lui sa fare ... voleva un evento che parte dal sistema - nessuno - 12/07/11 21:11
devi utilizzare le API - BionicGod - 15/07/11 19:28
PM