Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ошибка service.status

70K
23 июня 2011 года
smth
6 / / 23.06.2011
Здравствуйте! Помогите, пожалуйста, решить проблему: дана форма, на ней 3 кнопки: запуск службы, остановка и проверка статуса. При запуске службы в текстовом поле должно писаться, что она запустилась (если уже запущена - то пишется, что уже запущена), при остановке - то, что остановлена, при проверке статуса - статус службы.
Проблема: некорректно принимается статус службы. Например, если запустить ее через "Администрирование - службы" - она запускается, а программка пишет, что не запущена, отсюда - ексепшн. Я уже нагородил всяких костылей, которые проблему не решают. Заранее спасибо!

Form1.cs:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestServiceController
{
    public partial class Form1 : Form
    {
        Class1 c = new Class1();
        string mes;
           
        public Form1()
        {
            c.init();
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            c.start(ref mes);
            textBox1.Text = mes;
            button1.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {

            button2.Enabled = false;
            c.stop(ref mes);
            textBox1.Text = mes;
            button2.Enabled = true;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            button3.Enabled = false;
            c.status(ref mes);
            textBox1.Text = mes;
            button3.Enabled = true;
        }
    }
}


class1.cs
Код:
using System;
using System.ServiceProcess;

namespace TestServiceController
{
    class Class1
    {
        ServiceController service;
        public void init()
        {
            service = new ServiceController("Service1");
        }
        public void stop(ref string mes)
        {
            try
            {
                if (!service.Status.Equals(ServiceControllerStatus.Stopped))
                {
                    service.Stop();
                    mes = "servise stopped!";
                }
                else mes = "cann't stop service: already stopped!";
            }
            catch (Exception e)
            {
                mes = e.ToString();
            }
        }
        public void start(ref string mes)
        {
            try
            {
                if (!service.Status.Equals(ServiceControllerStatus.Running))
                {
                    service.Start();
                    mes = "service started!";
                }
                else mes = "cann't start: already started";
            }
            catch (Exception e)
            {
                mes = e.ToString();
            }
        }
        public void status(ref string mes)
        {

            try
            {
                if (service.Status.Equals(ServiceControllerStatus.Running)) mes = "Running";
                else if (service.Status.Equals(ServiceControllerStatus.Stopped)) mes = "Stopped";
            }
            catch (Exception e)
            {
                mes = e.ToString();
            }
        }
    }
}
14
24 июня 2011 года
Phodopus
3.3K / / 19.06.2008
Ну ServiceController применен, вроде верно, а служба то Service1 существует?
Ну и разрешения должны быть Full Trust
70K
24 июня 2011 года
smth
6 / / 23.06.2011
Service1 существует, написана мною же и исправно работает (пишет сообщения в файл каждые 10 секунд). Прогу управления запускаю с полными правами, иначе она совсем бы не работала, а так - она же позволяет запускать или останавливать службу 1-2 раза, прежде чем начинает неверно принимать ее состояние.
зы - сама служба через "Администрирование - службы" и через cmd - net start запускается и останавливается без проблем сколько угодно раз
70K
24 июня 2011 года
smth
6 / / 23.06.2011
Проблема решена. Если кому пригодится:

Объект службы надо создавать не в конструкторе, а в каждом методе, например

public void stop(ref string mes)
{
service = new ServiceController(ServiceName);
if (!service.Status.Equals(ServiceControllerStatus.Stopped))
{
service.Stop();
mes = "servise stopped!";
}
else mes = "cann't stop service: already stopped!";

Тему можно закрывать.
14
24 июня 2011 года
Phodopus
3.3K / / 19.06.2008
В смысле объект контроллера служб? Это как минимум странно. А откуда такое требование?
70K
24 июня 2011 года
smth
6 / / 23.06.2011
Цитата: Phodopus
В смысле объект контроллера служб? Это как минимум странно. А откуда такое требование?



прошу прощения, не понял вопроса.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог