Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    8

    ASP.NET informazioni sulla gestione dei servizi microsoft

    Buongiorno,

    Avrei bisogno di conoscere una traccia del codice che serve per gestire dei servizi microsoft ..
    tramite codice ASP.net e IIS 6

    In buona sostanza ..ho un Server (su cui e' installato IIS 6) con IP pubblico .. gestibile tramite la porta 80 ... su questo server ho dei servizi che voglio monitorare.

    Come posso impostare il mio "programma" per avere una pagina ASP che mi dice se i servizi sono attivo .. sono stoppati .. e magari posso gestirli (Stoppare o attivare)

    Uso Visual studio 2005 e framework 2.0.

    VI ringrazio in anticipo.

  2. #2
    Prima di tutto penso che per avere un elenco dei servizi di un server devi creare un utente che sia amministratore della macchina. E il processo o l'application pool del tuo monitor deve girare con questo account amministrativo.

    Aggiungi nelle reference del progetto:
    System.ServiceProcess.dll


    Per avere l'elenco dei servizi puoi fare:

    private void ListServices()
    {
    System.ServiceProcess.ServiceController[] services;
    services = System.ServiceProcess.ServiceController.GetService s();
    listBox1.Items.Clear();
    for (int i = 0; i < services.Length; i++)
    {
    listBox1.Items.Add(services[i].ServiceName);
    }
    }

    Per sapere se un servizio è attivo o meno:

    private void button4_Click(object sender, System.EventArgs e)
    {
    string serviceName = listBox1.SelectedItem.ToString();
    System.ServiceProcess.ServiceController myController = new System.ServiceProcess.ServiceController(serviceNam e);
    if (myController.CanStop)
    {
    MessageBox.Show(myController.DisplayName + " can be stopped.");
    } else {
    MessageBox.Show(myController.DisplayName + " cannot stop.");
    }
    }


    Fammi sapere
    Ciao
    K
    Kalman

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    8
    Molto gentile e rapido!!!

    Ora provo e ti faccio sapere ..

    grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    8
    Originariamente inviato da Kalman
    Prima di tutto penso che per avere un elenco dei servizi di un server devi creare un utente che sia amministratore della macchina. E il processo o l'application pool del tuo monitor deve girare con questo account amministrativo.

    Aggiungi nelle reference del progetto:
    System.ServiceProcess.dll


    Per avere l'elenco dei servizi puoi fare:

    private void ListServices()
    {
    System.ServiceProcess.ServiceController[] services;
    services = System.ServiceProcess.ServiceController.GetService s();
    listBox1.Items.Clear();
    for (int i = 0; i < services.Length; i++)
    {
    listBox1.Items.Add(services[i].ServiceName);
    }
    }

    Per sapere se un servizio è attivo o meno:

    private void button4_Click(object sender, System.EventArgs e)
    {
    string serviceName = listBox1.SelectedItem.ToString();
    System.ServiceProcess.ServiceController myController = new System.ServiceProcess.ServiceController(serviceNam e);
    if (myController.CanStop)
    {
    MessageBox.Show(myController.DisplayName + " can be stopped.");
    } else {
    MessageBox.Show(myController.DisplayName + " cannot stop.");
    }
    }


    Fammi sapere
    Ciao
    K

    Ok il codice funziona bene .. a parte il messagebox che ho sostiutito con un litteral ...

    Ora mi manca solo la funzione per fare partire o stoppare i servizi da remoto .. ora ci guardo.

    thx ancora

  5. #5
    Dopo che hai selezionato il servizio che ti interessa basta che fai

    if (myController.CanStop)
    {
    myController.Stop();
    // oppure
    //myController.Start();
    }


    Ciao
    K
    Kalman

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    8
    grazie mille ..

    appena finito ti farò vedere il lavoro :-)

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    8
    Ok sono arrivato a buon punto ..

    se volessi filtrare i servizi .. evidenziare per esempio nel listbox solo quelli che cominciano per E ?

    cosa mi suggerisci ?

  8. #8
    Quando popoli la listbox controlla che inizi per "e"

    for (int i = 0; i < services.Length; i++)
    {
    if (services[i].ServiceName.ToLower().StartsWith("e"){
    listBox1.Items.Add(services[i].ServiceName);
    }
    }

    Ciao
    K
    Kalman

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    8
    :-) ci ero quasi arrivato .. stavo gestendola con Substring ...

    Ti devo pagare se vai avanti cosi' :-)

    grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    8
    Ho un nuovo ed interessante quesito :

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.ServiceProcess;


    public partial class _Default : System.Web.UI.Page
    {

    protected void Page_Load(object sender, EventArgs e)
    {

    ListServices();
    }

    private void ListServices()
    {

    System.ServiceProcess.ServiceController[] services;
    services = System.ServiceProcess.ServiceController.GetService s();

    for (int i = 0; i < services.Length; i++)
    {
    if (services[i].ServiceName.ToLower().StartsWith("a")){
    this.ListBox1.Items.Add(services[i].ServiceName);
    }
    }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
    string serviceName = this.ListBox1.SelectedItem.ToString();
    System.ServiceProcess.ServiceController myController = new System.ServiceProcess.ServiceController(serviceNam e);
    this.ListBox1.Items.Clear();
    if (myController.CanStop)
    {
    this.Literal1.Text = myController.DisplayName + " è attivo.";
    ///MessageBox.Show(myController.DisplayName + " can be stopped.");
    }
    else
    {
    this.Literal1.Text = myController.DisplayName + " non è attivo.";
    }
    myController.Close();
    ListServices();
    }

    private void InitializeComponent()
    {

    }



    protected void Button2_Click(object sender, EventArgs e)
    {


    string serviceName = this.ListBox1.SelectedItem.ToString();
    System.ServiceProcess.ServiceController myController = new System.ServiceProcess.ServiceController(serviceNam e);
    this.ListBox1.Items.Clear();

    myController.Stop();
    ListServices();

    }
    protected void Button3_Click(object sender, EventArgs e)
    {
    string serviceName = this.ListBox1.SelectedItem.ToString();
    System.ServiceProcess.ServiceController myController = new System.ServiceProcess.ServiceController(serviceNam e);

    this.ListBox1.Items.Clear();

    myController.Start();
    ListServices();

    }
    }


    Questo è il codice in ASP.NET per visualizzare e gestire l'attivazione e disattivazione di servizi ..


    PROBLEMA ...

    SUL MIO PORTATILE usando visual studio .. il programma parte e i servizi possono essere tranqullamente stoppati e attivati.

    Mettendolo sul server di TEST con IIS 6, configurato in modo corretto .. etc etc il programma parte .. ma quando cerco di aprire o chiudere un servizio mi da questo errore :

    Access is denied
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.ComponentModel.Win32Exception: Access is denied

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:


    [Win32Exception (0x80004005): Access is denied]

    [InvalidOperationException: Cannot open Alerter service on computer '.'.]
    System.ServiceProcess.ServiceController.GetService Handle(Int32 desiredAccess) +172
    System.ServiceProcess.ServiceController.Stop() +110
    _Default.Button2_Click(Object sender, EventArgs e) +80
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
    System.Web.UI.WebControls.Button.RaisePostBackEven t(String eventArgument) +107
    System.Web.UI.WebControls.Button.System.Web.UI.IPo stBackEventHandler.RaisePostBackEvent(String eventArgument) +7
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEve ntHandler sourceControl, String eventArgument) +11
    System.Web.UI.Page.RaisePostBackEvent(NameValueCol lection postData) +33
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102

    --------------------------------------------------------------------------------
    Version Information: Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.42


    Mi sembra possa essere un errore di autenticazione utente, nel senso che l'utente non ha i diritti per startare e stoppare servizi ...

    Per usavo l'account administrator della macchina .. quindi non ha molto senso .. in più ho provato a browsare l'IIS da un pc remoto .. usando microsoft autentication e mettendo i diritti amministrativi .. niente ...

    qualche idea ?

    grazie

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.