Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C#] Chiusura processi remoto, settaggio permessi

    Avendo una applicazione che lavora su diverse macchine nella LAN dell'ufficio e dovendo avere la possibilità di chiudere i processi anche nelle macchine connesse da remoto, mi si presenta il problema del settaggio dei permessi sulla macchina remoto dove terminare il processo.

    Per terminare un processo uso il metodo Process.Kill, se l'applicazione gira sulla mia macchina, nessun problema, ma se sono connesso ad un'altra macchina (dove naturalmente gira tale applicazione) non riesco a chiudere il processo.

    Suppongo sia una questione di permessi (non compare alcun messaggio di errore, l'applicazione si blocca e basta).

    Quindi la domanda, che codice devo implementare per settare i permessi in modo da far si che il metodo Process.Kill abbia effetto?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Da MSDN

    "The method is available only for processes running on the local computer."

  3. #3
    Ma il metodo Process.Kill viene eseguito sul computer locale.

    Mi spiego, quando voglio terminare un processo sulla macchina (per esempio) 192.168.1.3, mi collego all'applicazione che gira su tale macchina e gli ordino di eseguire la Process.Kill, quindi tale metodo viene eseguito praticamente in locale, dato che l'applicazione è attica sulla 192.168.1.3.

    Non capisco perchè se mi connetto a me stesso e ordino di terminare un processo, questo viene terminato, mentre se mi connetto ad un'altra macchina in rete e faccio la stessa cosa, il programma si blocca . . .

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questo fatto non era chiaro dal tuo primo post ...

    Quindi c'e' una applicazione server e una client che comunicano ... come lo fanno?
    Con quale codice ...?

  5. #5
    Client e server comunicano tramite TCPCLient e TCPListener.

    Tutti i trasferimenti di dati da un computer all'altro non danno problemi, solo l'azione di Process.Kill da problemi piantando entranbe le applicazioni.

    In sostanza la sintassi è questa:

    Client -> Richiedo al Server la lista dei processi attivi
    Server -> Grazie alla GetProcesses crea un array con i processi attivi e lo manda al client
    Client -> Ricevo l'array con i processi attivi sul server e lo stampo in una ListBox, poi seleziono il processo che voglio terminare e invio il nome del processo al Server
    Server -> Riceve il nome del processo da terminare e grazie alla GetProcesses crea l'array con tutti i processi attivi, poi li scorre con un ciclio Foreach e termina tutti i processi con quel nome grazie al metodo Process.Kill

    Se mi connetto a me stesso, quindi con Client e Server sulla mia stessa macchina, la cosa funziona, se mi connetto ad un'altra macchina (Client sulla mia, Server sull'altra) quando cerco di terminare il processo si blocca l'applicazione.


  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ci mostri la parte server che riguarda il process.kill?

  7. #7
    Scusa, questa è la parte server:

    codice:
    // Ricevo il nome del processo da terminare
    string proc_scelto;
    dati = new byte[256];
    spazio = stream.Read(dati, 0, dati.Length);
    proc_scelto = System.Text.Encoding.ASCII.GetString(dati, 0, spazio);
                    
    
    // Ricerco il processo e lo termino
    Process[] processi = Process.GetProcesses();
    foreach (Process p in processi)
    {
         if (p.ToString() == proc_scelto)
         {
               p.Kill();
         }
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non dovrebbe essere

    if (p.ProcessName == proc_scelto)


    ?

  9. #9
    Ho provato a mettere p.ProcessName al posto di p.ToString() ma il risultato è lo stesso.

    Mettendo alcune MessageBox mi sembra di aver capito che l'errore arriva nel ciclo Foreach, ma anche con una MessageBox (prima della If) dentro il ciclo, questa non viene visualizzata, come se appena entrata nel ciclo l'applicazione si pianti . . .

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti confermo che devi usare ProcessName ma non e' questo il problema principale.

    Prova con le MessageBox ad identificare esattamente qual e' l'ultima istruzione eseguita ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.