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;
}
}
}
ошибка service.status
Проблема: некорректно принимается статус службы. Например, если запустить ее через "Администрирование - службы" - она запускается, а программка пишет, что не запущена, отсюда - ексепшн. Я уже нагородил всяких костылей, которые проблему не решают. Заранее спасибо!
Form1.cs:
Код:
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();
}
}
}
}
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();
}
}
}
}
Ну и разрешения должны быть Full Trust
зы - сама служба через "Администрирование - службы" и через cmd - net start запускается и останавливается без проблем сколько угодно раз
Объект службы надо создавать не в конструкторе, а в каждом методе, например
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!";
Тему можно закрывать.
В смысле объект контроллера служб? Это как минимум странно. А откуда такое требование?
Цитата: Phodopus
В смысле объект контроллера служб? Это как минимум странно. А откуда такое требование?
прошу прощения, не понял вопроса.