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

    [VB.NET o C#] Intercettare la chiusura di un programma

    Salve.
    Cercherò di essere breve ma preciso.

    Ho un programma che monitorizza le telefonate fatte dalla camere di un albergo (ma a voi non credo interessi). Ho bisogno di realizzare un programmino in VB.NET o C# (o vedete voi...) che mi intercetti la chiusura di tale applicazione che NON DEVE ESSERE MAI CHIUSA!! senza motivo da terze persone.

    L'idea mia sarebbe che, quando si cerca di chiudere il programma di monitoraggio telefonico venga fatta una delle due seguenti cose:
    1) mostrata form con richiesta password ( e solo dopo verifica si chiude il programma )
    2) creato un file chiusura.log con scritto "il programma è MONITOR-TELEFONO è stato chiuso alle ore..."

    Sono di molto in alto mare... dite qualunque cosa (sensata) vi venga in mente!!

    Grazie
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    una soluzione sarebbe quella di fare un loop o usare un timer che "controlla" sempre se il processo (cioè il programma che non deve essere mai chiuso) è in esecuzione o meno e poi quando si accorge che il programma non stà girando scrive in un file xml.
    in c# è molto semplice farlo....
    tempo fa feci una cosa del genere...
    http://www.sharebigfile.com/file/127...sharp-rar.html


    I got the remedy

  3. #3
    Ottimo... lo scarico subito!
    Ma, tanto per parlare... non è che implica una discreta occupazione di CPU?
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da cleverboy
    Ottimo... lo scarico subito!
    guarda le sorgenti...e tira fuori quello che ti serve...
    in quel programmino manca la parte del log...

    Originariamente inviato da cleverboy
    Ma, tanto per parlare... non è che implica una discreta occupazione di CPU?
    ogni programma consuma e occupa risorse...cmq, questi tipi di programmi(cioè quelli che fanno polling a intervalli di tempo regolari) hanno dei consumi a picco...nel senso che per la maggior parte del tempo "dormono", poi si "svegliano", consumano e poi dormono di nuovo...
    il mio programmino, in un processore amd a 1 ghz occupa dal 4 - 14 % della cpu...(ovviamente il consumo si verifica nel caso della "sveglia" del programma)...
    I got the remedy

  5. #5
    OK... me lo studio ben bene!
    Ovviamente poi se funziona a dovere citerò il tuo nome quale Sommo Ispiratore!
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da cleverboy
    OK... me lo studio ben bene!
    Ovviamente poi se funziona a dovere citerò il tuo nome quale Sommo Ispiratore!
    I got the remedy

  7. #7
    Eccomi di nuovo...
    visto che il programma è tuo immagino che tu sappia spiegarmi come mai succedono cose anomale...

    Ho preso spunto dal tuo codice e tutto filerebbe bene se solo non si verificasse questo errore, che sinceramente non capisco:

    codice:
    void tmr_Tick(object sender, EventArgs e)
    {
        Process[] pc = Process.GetProcesses();
        ...
    }
    Quando il programma elabora questa riga di codice, ecco cosa mi risponde:

    Eccezione non gestita di tipo "System.InvalidOperationException" in system.dll

    Informazioni aggiuntive: Impossibile ottenere informazioni sui processi dal computer remoto.

    Il programma "[3612] ProcMonitor.exe" è terminato con il codice 0 (0x0).


    Se invece lancio il tuo eseguibile... funziona.

    Tieni conto che io ho Visual Studio 2003 e non 2005... ma la logica di programmazione non penso sia cambiata poi tanto!! NO?

    Aggiungo anche che se, puramente per debug, eseguo un'istruzione del genere...
    codice:
        Process pc = Process.GetCurrentProcess();
        lblStato.Text = pc.Id.ToString();
    Questa funziona!! Dunque non capisco come mai non riesca a restituire la lista processi!

    Tu scommetto che lo sai!
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    forse perchè hai un processore dual core o hyperthreading e/o hai il framework 1.x.
    la causa piu probabile è la prima che ho scritto...
    scommetto che il mio programma non ti da tutti i processi in esecuzione.
    confermi ?
    credo che,
    il mio programma funziona perchè è stato compilato in un processore single core. quando viene eseguito, usa solo una core del tuo processore e non se ne accorge dell'altra.

    prova cosi':

    Process[] pc = Process.GetProcesses("127.0.0.1");

    e se non funziona, cosi':

    Process[] pc = Process.GetProcesses("localhost");
    I got the remedy

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non penso proprio che questo tipo di codice possa distinguere il "core" in cui viene eseguito ... anzi, per dirla tutta, il core dei processori non hanno nulla a che vedere con la lista dei processi in esecuzione dal sistema operativo.

    Semmai e' piu' probabile una questione di permessi nell'accesso a qualche proprieta' di qualche processo di sistema durante la creazione della lista ...

  10. #10
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da oregon
    Non penso proprio che questo tipo di codice possa distinguere il "core" in cui viene eseguito ... anzi, per dirla tutta, il core dei processori non hanno nulla a che vedere con la lista dei processi in esecuzione dal sistema operativo.
    non lo distingue, semplicemente usa una core, nel senso che windows lo fa girare su una core.


    Originariamente inviato da oregon
    Semmai e' piu' probabile una questione di permessi nell'accesso a qualche proprieta' di qualche processo di sistema durante la creazione della lista ...
    questo è da escludere perchè lui dice che il mio programma funziona...
    se fosse come dici tu, il mio programma andrebbe in crash.
    I got the remedy

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.