2011-09-27 4 views
0

나는 맞춤형 Windows 서비스를 관리하는 하나의 응용 프로그램을 개발하고 있습니다. 내가 모든 서비스를 얻기 위해 ServiceController 개체를 사용하고 있지만, 그 후 나는 우리의 맞춤형 서비스와 시스템 서비스를 어떻게 구별 할 것인가?Windows 서비스 개발 C#

나는 다음과 같은 코드를 사용하고 있습니다 :

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);          
}   
+0

처럼 그들을 관찰 할 수있다? 몇 가지 코드를 보여줄 수 있습니까? –

+0

'ServiceName' 속성을 확인하고 싶지 않으십니까? –

+0

서비스 이름 속성을 사용 하겠지만 다시 하드 코드 된 것입니다. – Meraj

답변

0

app.config에서 서비스의 이름을 넣습니다. 그리고 응용 프로그램이 시작될 때 그 내용을 읽으십시오.

http://csd.codeplex.com/을 사용하여 사용자 지정 구성 섹션을 만들 수 있습니다.

+0

ur 답장을 보내 주셔서 감사합니다, 현재 나는이 방법만을 사용하고 있습니다.하지만 다시 새로운 서비스를 추가하면 다시 app.config를 수정해야합니다. – Meraj

+0

서비스의 'DisplayName' 속성에 회사 이름을 추가하십시오. – jgauffin

0

당신은 당신의 서비스 각 .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; 
    } 
}