PDA

Visualizza la versione completa : [C#] Metodo Process.Kill per chiudere un processo già attivo


 
SkyNET290897
06-02-2007, 15:11
Ho appena iniziato ad usare la classe Process e sto cercando di terminare un processo in memoria con il metodo Kill, con questa sintassi:



Process processo = new Process();
processo.StartInfo.FileName = @"C:\Windows\Notepad.exe";
processo.Kill();


Quando premo il tasto a cui ho associato tale codice viene generata una eccezione che dice: Nessun processo associato all'oggetto.

Appunto, non mi è chiara la sintassi per associare il processo che mi interessa.

:confused:

oregon
06-02-2007, 15:26
Beh ... dopo averne indicato il nome, devi farlo partire il processo ... se non e' partito non esiste, e se non esiste non lo puoi killare.

Process processo = new Process();
processo.StartInfo.FileName = @"C:\Windows\Notepad.exe";
processo.Start();

In ogni caso, piuttosto che fare il Kill, e' meglio provare a chiuderlo con

processo.Close();

SkyNET290897
06-02-2007, 15:29
Ma il processo che devo chiudere è già attivo, non ho bisogno di farlo partire.

Risolto!

oregon
06-02-2007, 15:48
Allora e' un'altra storia (non era chiaro ...).

Devi fare una ricerca tra i processi attivi e killarlo



Process[] processes = Process.GetProcessesByName("notepad");
foreach (Process proc in processes)
{
proc.Kill();
}

SkyNET290897
06-02-2007, 21:52
Ho implementato il codice che hai riportato esattamente un minuto dopo aver letto la tua prima risposta. :)

Solo che ci sono applicazioni che mi danno accesso negato, come ad esempio il mio firewall, che però dal Task Manager posso chiudere senza problemi . . . :confused:

oregon
06-02-2007, 22:14
A parte il fatto che un firewall non andrebbe chiuso ... bisogna vedere cosa stai tentando di chiudere con il codice e cosa chiudi con il task manager ... non e' detto siano lo stesso processo ...

SkyNET290897
07-02-2007, 00:01
I miei erano solo esperimenti, logicamente non sono così pazzo da andarmene in giro per la rete senza programmi come firewall e antivirus.

La mia curiosità sta nel fatto che, per abbattere l'appicazione firewall, nel mio caso il Sygate Personal Firewall, ho implementato il seguente codice:



Process[] localByName = Process.GetProcessesByName("smc");
foreach (Process p in localByName)
{
p.Kill();
}


Dove "smc" è il processo attivo in memoria relativo al firewall.

Allo stato attuale non conosco il motivo per cui il programma non ha accesso.

EDIT:

Rettifico, ricordavo male, non posso abbattere il firewall neanche da Task Manager.
Ma come si può rendere un programma "non chiudibile"? O al limite chiudere un programma del genere, il tutto da codice?

oregon
07-02-2007, 00:33
Ah ecco ... vedi? Non puoi neanche da task manager ...



I miei erano solo esperimenti, logicamente non sono così pazzo da andarmene in giro per la rete senza programmi come firewall e antivirus.


E spero che non lo sarai altrettanto tentando di scrivere e mettere in giro programmi che cercano e chiudono i firewall ... :)

Sicuramente il processo del fw e' un servizio che opera nel contesto di sicurezza di LocalSystem (o simile) e il tuo account non ha le autorizzazioni adeguate per poterlo chiudere.

Per poterlo fare, il processo che esegue il Kill deve essere eseguito almeno nello stesso contesto di sicurezza ...

SkyNET290897
07-02-2007, 18:05
Originariamente inviato da oregon
Ah ecco ... vedi? Non puoi neanche da task manager ...



E spero che non lo sarai altrettanto tentando di scrivere e mettere in giro programmi che cercano e chiudono i firewall ... :)

Sicuramente il processo del fw e' un servizio che opera nel contesto di sicurezza di LocalSystem (o simile) e il tuo account non ha le autorizzazioni adeguate per poterlo chiudere.

Per poterlo fare, il processo che esegue il Kill deve essere eseguito almeno nello stesso contesto di sicurezza ...

Tranquillo, non intendo fare lamerate, del resto, mi piace sapere anche come si costruiscono le armi nucleari, ma se domani mi trovi un contenitore di uranio, mica faccio saltare in aria la città! :)

Non capisco questa tua frase:


Sicuramente il processo del fw e' un servizio che opera nel contesto di sicurezza di LocalSystem (o simile) e il tuo account non ha le autorizzazioni adeguate per poterlo chiudere.

Per poterlo fare, il processo che esegue il Kill deve essere eseguito almeno nello stesso contesto di sicurezza ...

Il mio account è quello di Amministratore, non è sufficiente ad avere pieno controllo della mia macchina?

Cosa intendi per:


nello stesso contesto di sicurezza

:confused:

oregon
07-02-2007, 18:12
Originariamente inviato da SkyNET290897
Tranquillo, non intendo fare lamerate, del resto, mi piace sapere anche come si costruiscono le armi nucleari, ma se domani mi trovi un contenitore di uranio, mica faccio saltare in aria la città! :)

Sai ... questi sono discorsi un po' "scivolosi" ... personalmente sto sempre attento a parlarne perche' non sai mai chi c'e' dall' "altra parte" ...



Il mio account è quello di Amministratore, non è sufficiente ad avere pieno controllo della mia macchina?

No ... il pieno controllo della macchina ce l'ha il sistema operativo, non l'amministratore.

Il contesto di sicurezza LocalSystem, in cui girano alcuni servizi, ha maggiori privilegi rispetto all'amministratore ...



Cosa intendi per: ...

Il programma che effettua il kill, dovrebbe essere eseguito come LocalSystem (come servizio o driver in kernel mode ...)

Loading