Проблема службы Windows в C # - PullRequest
1 голос
/ 28 февраля 2011

Я разработал оконную службу, в которой я вызвал метод RunProgram из OnStart () .. Но когда я устанавливаю его пакет, он не отображается в консоли служб .... Любые предложения приветствуются ....

protected override void OnStart(string[] args)
        {
            base.OnStart(args);
            rd = new Thread(new ThreadStart(RunProgram));
            rd.Start();
        }

Мой класс установщика выглядит следующим образом ...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Management;
using System.ServiceProcess;
using System.Linq;


namespace WindowsService1
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }
        public System.ServiceProcess.ServiceController serviceController = new ServiceController();
        private void ProjectInstaller_Committed(object sender, InstallEventArgs e)
        {
            serviceController.ServiceName = "MyTestingService";
            ConnectionOptions coOptions = new ConnectionOptions();


            coOptions.Impersonation = ImpersonationLevel.Impersonate;

            ManagementScope mgmtScope = new System.Management.ManagementScope(@"root\CIMV2", coOptions);

            mgmtScope.Connect();

            ManagementObject wmiService;

            wmiService = new ManagementObject("Win32_Service.Name='" + this.serviceController.ServiceName + "'");

            ManagementBaseObject InParam = wmiService.GetMethodParameters("Change");

            InParam["DesktopInteract"] = true;

            ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", InParam, null);

            this.serviceController.Start();
        }
    }
}

Мой класс обслуживания выглядит следующим образом ...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Web;
using System.Threading;
namespace WindowsService1
{
    public partial class MyTestingService : ServiceBase
    {
        public MyTestingService()
        {
            InitializeComponent();
        }
        System.Threading.Thread rd;
        protected override void OnStart(string[] args)
        {
            base.OnStart(args);
            rd = new Thread(new ThreadStart(RunProgram));
            rd.Start();
        }

        protected override void OnStop()
        {

        }
        public void RunProgram()
        {


           //My Code to do here


        }



    }
}

Ответы [ 4 ]

0 голосов
/ 07 марта 2011

Пожалуйста, проверьте, выполнили ли вы следующие шаги:

1.После создания проекта службы Windows перейдите в представление дизайна класса службы (просто дважды щелкните класс service1.cs).

2. В представлении конструктора щелкните правой кнопкой мыши и выберите Добавить установщик . Это создаст класс установщика с именем ProjectInstaller.cs . Отсутствие ProjectInstaller.cs или любая ошибка в настройке ProjectInstaller.cs может привести к не отображению службы в консоли служб.

3. Перейдите в режим проектирования ProjectInstaller.cs , там вы найдете два установщика ->

a.**ServiceInstaller1**

b.**ServiceProcessInstaller1**  

4.Нажмите правой кнопкой мыши ServiceInstaller1 и перейдите на вкладку свойств

a.Edit the ServiceName with the name you want to 
   see your service in the service console.

   b.Change the **StartType** to **Automatic**.

5.Нажмите правой кнопкой мыши ServiceProcessInstaller1 и перейдите на вкладку свойств

 a.Change the account to **LocalService**

6. Save and try it.

Надеюсь, это поможет вам ........

0 голосов
/ 28 февраля 2011

ты пробовал это?http://msdn.microsoft.com/en-us/library/zt39148a.aspx Я помню, что в старых сервисах до .NET вы также регистрировали сервис, устанавливающий его. У установщика был определенный ключ, что-то вроде "autoregister"

0 голосов
/ 01 марта 2011

После того как ваша служба построена, вы должны выполнить следующую команду из командной строки Visual Studio:

installutil [/u[ninstall]] [options] assembly [[options] assembly] ...

Полная информация здесь

0 голосов
/ 28 февраля 2011

Есть ли у вас файл журнала? Возможно, в вашем веб-сервисе есть какая-то ошибка. Вы также можете отладить свой веб-сервис.

static void Main()
{
#if (!DEBUG)


            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] { new Service1Component() };
            ServiceBase.Run(ServicesToRun);


#else
            Service1Component s = new Service1Component();
            s.RunProgram();
#endif
}

P.s. s.RunProgram() - это ваш метод, который вы можете использовать для отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...