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

    Terminare processo Win dei Servizi di rete

    Linguaggio utilizzato: Visual Basic 2008 Express Edition.

    Buongiorno, ho la necessità di arrestare un servizio di rete di Win 2003. Poco tempo fa ho fatto un programmino che terminava ogni 10 minuti il processo interessato e ha sempre funzionato fino a che Win ha considerato grave la caduta del processo decidendo di spegnere il server automaticamente. Prima facevo questa cosa:

    codice:
    Public Class Form1
    
    Public Processo As Process()
    
    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
    Processo = Process.GetProcessesByName(txtProcesso.Text, My.Computer.Name)
    
    If processo.Length > 0 Then
    
    Processo(0).Kill()
    
    End If
    
    End Sub
    
    Private Sub btnConferma_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConferma.Click
    
    Dim millisecondi As Double
    
    millisecondi = txtTimer.Text * 1000
    
    Timer1.Interval = millisecondi
    Timer1.Start()
    lblTime.Text = "Avviato!"
    End Sub
    
    
    Private Sub btnStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStop.Click
    
    Timer1.Stop()
    lblTime.Text = "Arrestato!"
    End Sub
    
    End Class
    così funzionava, ma la Kill è un modo troppo violento di chiudere un processo e questo Windows 2003 non lo tollera....ora invece faccio così:

    codice:
    Public Class Form1
    
    Public Processo As Process()
    
    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
    
    For Each obj In GetObject("winmgmts:").ExecQuery("Select * FROM Win32_Process WHERE Name='" & txtProcesso.Text & "'")
    obj.terminate()
    Next
    
    
    End Sub
    
    Private Sub btnConferma_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConferma.Click
    
    Dim millisecondi As Double
    
    millisecondi = txtTimer.Text * 1000
    
    Timer1.Interval = millisecondi
    Timer1.Start()
    lblTime.Text = "Avviato!"
    End Sub
    
    
    Private Sub btnStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStop.Click
    
    Timer1.Stop()
    lblTime.Text = "Arrestato!"
    End Sub
    
    End Class
    ma questa volta non mi termina il processo nemmeno se la faccio eseguire ogni secondo...termina processi semplici tipo il taskmgr, oppure l'internet exlporer, ma non quello che mi interessa...come posso fare per far terminare questo processo in maniera pulita?

    Premetto che tale processo si può tranquillamente chiudere dalla gestione dei servizi di windows semplicemente facendo click su "Arresta" senza alcuna limitazione.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Devi appunto usare la gestione dei servizi (il Service Control Manager).

    Con .NET attraverso la classe

    ServiceController
    http://msdn.microsoft.com/it-it/libr...vicecontroller(VS.90).aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ciao Oregon, ti ringrazio per la risposta.
    Come prima cosa ho provato a fare il classico Copia/Incolla e il VB mi da alla dichiarazione

    codice:
    Imports System.ServiceProcess
    questo errore: "Lo spazio dei nomi o il tipo specificato nelle importazioni 'System.ServiceProcess' non contiene alcun membro pubblico o non è definito. Accertarsi che lo spazio dei nomi o il tipo sia definito e contenga almeno un membro pubblico e che il nome dell'elemento importato non utilizzi alias.".

    Ti ricordo che utilizzo VB 2008 Express Edition.

  4. #4
    Vi prego ragazzi sto impazzando nel girare qua e la per la rete per riuscire a risolvere questo problema...perchè mi da errore su Imports System.ServiceProcess?
    Inoltre sono andato a vedere sotto C:\Windows\Assembly\...e ho notato che questo System.ServiceProcess c'è in due versioni (la 1 e la 2.0) e sono installate entrambe, inoltre ho aggiunto anche i riferimenti in VB...

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non ho capito quando ti dà quell'errore ... hai scritto l'Imports e hai aggiunto il riferimento a System.ServiceProcess ?

    Probabilmente è la versione Express che non ti consente di gestire i Servizi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    A questo punto credo proprio dipenda dal fatto che io stia utilizzando la Express. Come posso fare però a capire se effettivamente dipende solo dalla versione del Visual Basic?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Cerca con google ... Express e Service ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ciao Oregon, tra le proprietà del progetto sotto i riferimenti non avevo caricato la System.ServiceProcess e ora sono riuscito ad ottenere ciò che volevo in questo modo:

    codice:
    Imports System
    Imports System.ServiceProcess
    Imports System.Diagnostics
    Imports System.Threading
    
    Class Form1
    
        Private Sub btnConferma_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConferma.Click
    
            Timer1.Interval = txtTimer.Text * 1000
            Timer1.Start()
            lblTime.Text = "Avviato!"
    
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
            Dim scServices() As ServiceController
            scServices = ServiceController.GetServices()
    
            Dim scTemp As ServiceController
            For Each scTemp In scServices
    
                If scTemp.ServiceName = txtProcesso.Text Then
                   
                    Dim sc As New ServiceController(txtProcesso.Text)
    
                    If sc.ServiceName = txtProcesso.Text And sc.Status.ToString() = "Running" Then
    
                        sc.Stop()
    
                    End If
    
                End If
    
            Next scTemp
    
        End Sub
    
        Private Sub btnStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnStop.Click
    
            Timer1.Stop()
            lblTime.Text = "Arrestato!"
    
        End Sub
    
    End Class
    Ti ringrazio per l'aiuto.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da nanopeppe
    ... non avevo caricato la System.ServiceProcess ...
    Infatti, ti avevo chiesto " hai aggiunto il riferimento a System.ServiceProcess ?" ma non l'avevi letto ...

    Ti ringrazio per l'aiuto.
    Di nulla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da oregon
    Di nulla.
    Ovviamente, se utilizzi il tutto per una attività illegale (come eludere il controllo delle CAL) te ne assumi le responsabilità (anche penali ...).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.