보통 서비스 모듈을 윈도우 서비스 형태로 서비스하기 위해 별도의 윈도우 서비스 프로젝트를 생성하고, 개발 완료 후 배치나 명령어 (sc create xxxx , net start xxxx) 로 등록한다.
좀 더 쉬운 방법이 있는데, 콘솔 프로젝트에 직접 서비스 클래스를 적용하는 것이다.
이하 코드 참조
class Program : ServiceBase
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
if (System.Environment.UserInteractive)
{
string parameter = string.Concat(args);
// console arguments를 이용하여 설치/제거
switch(parameter)
{
case "--install":
// System.Configuration.Install dll 참조...
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
break;
case "--uninstall":
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
break;
}
}
else
{
ServiceBase.Run(new Program());
}
// 프로세스가 종료되지 않도록 대기
Console.ReadKey();
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
File.AppendAllText(@"d:\temp\error.txt", ((Exception)e.ExceptionObject).Message + ((Exception)e.ExceptionObject).InnerException.Message + "\r\n");
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
Task.Run(async () => {
await Task.Delay(5000);
TestClass tc = new TestClass();
tc.Start();
});
}
}
[RunInstaller(true)]
public class MyWindowsServiceInstaller :Installer
{
public MyWindowsServiceInstaller()
{
// System.ServiceProcess dll 참조
var processInstaller = new ServiceProcessInstaller();
var serviceInstaller = new ServiceInstaller();
processInstaller.Account = ServiceAccount.LocalService;
serviceInstaller.DisplayName = "TEST Service";
serviceInstaller.StartType = ServiceStartMode.Automatic;
serviceInstaller.ServiceName = "TEST Service";
this.Installers.Add(processInstaller);
this.Installers.Add(serviceInstaller);
}
}
'개발 > .NET' 카테고리의 다른 글
특정 사용 포트 찾기 및 사용 포트의 서비스 찾기 (0) | 2014.11.03 |
---|---|
Visual Studio 의 초강력 리펙터링 툴인 ReSharper를 내려놓다.... (1) | 2011.09.15 |
[WCF] VS 개발 서버에서 동작하던 WCF 호스트가 IIS7에서 동작하지 않을 때... (0) | 2011.07.04 |
[동영상] .NET Framework 4.0 과 Visual Studio 2010 (0) | 2011.05.27 |
CLR 관점에서.... (0) | 2011.05.14 |