Разработка службы Windows C # - PullRequest
       7

Разработка службы Windows C #

0 голосов
/ 27 сентября 2011

Я разрабатываю одно приложение, которое управляет нашей собственной службой Windows.Я использую объект ServiceController для получения всех сервисов, но после этого, как я буду различать, какой сервис является нашим, а какой - системным?

Я использую следующий код:

ListViewItem datalist;                  

services = ServiceController.GetServices();                                     
ServiceList.Items.Clear();  
foreach(ServiceController service in services)
{                                       
    datalist = new System.Windows.Forms.ListViewItem(service.ServiceName.ToString());   

    datalist.SubItems.Add(service.DisplayName);    
    datalist.SubItems.Add(service.Status.ToString());                   
    ServiceList.Items.Add(datalist);                                    
}           

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

Вы можете поместить настройки в .exe.config для каждой из ваших служб и наблюдать их следующим образом:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Management;

class Program
{
    static void Main(string[] args)
    {
        var searcher =
            new ManagementObjectSearcher("SELECT * FROM Win32_Service WHERE Started=1 AND StartMode=\"Auto\"");
        foreach (ManagementObject service in searcher.Get())
        {
            foreach (var prop in service.Properties)
            {
                if (prop.Name != "PathName" || prop.Value == null)
                    continue;
                var cmdLine = prop.Value.ToString();
                var path = cmdLine.SplitCommandLine().ToArray()[0] + ".config";
                if (File.Exists(path))
                {
                    var serviceConfig = ConfigurationManager.OpenExeConfiguration(path);
/***/
                }
                break;
            }
        }
    }
}

SplitCommand

static class SplitCommand
{
    public static IEnumerable<string> Split(this string str, Func<char, bool> controller)
    {
        int nextPiece = 0; for (int c = 0; c < str.Length; c++)
        {
            if (controller(str[c]))
            { yield return str.Substring(nextPiece, c - nextPiece); nextPiece = c + 1; }
        } yield return str.Substring(nextPiece);
    }
    public static IEnumerable<string> SplitCommandLine(this string commandLine)
    {
        bool inQuotes = false;
        return commandLine.Split(c =>
        {
            if (c == '\"')
                inQuotes = !inQuotes; return !inQuotes && c == ' ';
        }).Select(arg => arg.Trim().TrimMatchingQuotes('\"')).Where(arg => !string.IsNullOrEmpty(arg));
    }
    public static string TrimMatchingQuotes(this string input, char quote)
    {
        if ((input.Length >= 2) && (input[0] == quote) && (input[input.Length - 1] == quote))
            return input.Substring(1, input.Length - 2);
        return input;
    }
}
0 голосов
/ 27 сентября 2011

Введите название ваших услуг в app.config.И читайте их при запуске приложения.

Вы можете использовать http://csd.codeplex.com/ для создания пользовательского раздела конфигурации.

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