July 18, 2022
01.Topshelf를 사용하는 이유
02.Topshelf 구성 확인하기
02.1 서비스이름
02.2 서비스 설명
02.3 이름 표시하기
02.4 인스턴스 이름
02.5 간단한 서비스
03.Topshelf 사용해보기
03.1 프로젝트 생성후 Topshelf패키지 설치
03.2 서비스 테스트를 위한 소스 구현
03.3 서비스 설치
디버깅을 하려고 하면 항상 경고창이 나타나서 꼼수를 이용하여 디버깅을 함
static class Program
{
static void Main()
{
#if DEBUG
var service = new SampleService();
service.Start();
#else
ServiceBase\[\] ServicesToRun;
ServicesToRun = new ServiceBase\[\]
{
new SampleService()
};
ServiceBase.Run(ServicesToRun);
#endif
}
}
위의 설정은 선택사항
x.SetServiceName("MyService");
서비스 제어 관리자에서 서비스에 대한 설명 지정
x.SetDescription("My First Topshelf Service");
서비스 제어 관리자에서 서비스의 표시 이름을 지정
x.SetDisplayName("MyService");
기본 서비스 이름과 결합됨 $로 구분되는 서비스의 인스턴스 이름을 지정
x.SetInstanceName("MyService");
기본틀
HostFactory.New(x =>
{
x.Service<MyService>();
});
// Service implements the ServiceControl methods directly and has a default constructor
class MyService : ServiceControl
{}
실제 사용
var rc = HostFactory.Run(x => //1
{
x.Service<TownCrier>(s => //2
{
s.ConstructUsing(name => new TownCrier()); //3
s.WhenStarted(tc => tc.Start()); //4
s.WhenStopped(tc => tc.Stop()); //5
});
x.RunAsLocalSystem(); //6
x.SetDescription("ABC Desc Sample Topshelf Host"); //7
x.SetDisplayName("ABC DisplayName Stuff"); //8
x.SetServiceName("ABC ServiceName Stuff"); //9
});
public class TownCrier
{
readonly System.Timers.Timer _timer;
public TownCrier()
{
_timer = new System.Timers.Timer();
_timer.Interval = 1000;
_timer.Elapsed += (sender, eventArgs) =>
Console.WriteLine("It is {0} and all is well", DateTime.Now);
}
public void Start()
{
_timer.Start();
}
public void Stop()
{
Thread.Sleep(100000);
_timer.Stop();
}
}
프로젝트 생성을 하고 프로젝트에서 오른쪽 마우스 버튼 클리
topshelf 검색 후 설치
using Topshelf;
public class TownCrier
{
readonly System.Timers.Timer _timer;
public TownCrier()
{
_timer = new System.Timers.Timer();
_timer.Interval = 1000;
_timer.Elapsed += (sender, eventArgs) =>
Console.WriteLine("It is {0} and all is well", DateTime.Now);
}
public void Start()
{
_timer.Start();
}
public void Stop()
{
Thread.Sleep(100000);
_timer.Stop();
}
}
public class Program
{
public static void Main()
{
//TownCrier townCrier = new TownCrier();
//townCrier.Start();
//Console.ReadLine();
//townCrier.Stop();
var rc = HostFactory.Run(x => //1
{
x.Service<TownCrier>(s => //2
{
s.ConstructUsing(name => new TownCrier()); //3
s.WhenStarted(tc => tc.Start()); //4
s.WhenStopped(tc => tc.Stop()); //5
});
x.RunAsLocalSystem(); //6
x.SetDescription("ABC Desc Sample Topshelf Host"); //7
x.SetDisplayName("ABC DisplayName Stuff"); //8
x.SetServiceName("ABC ServiceName Stuff"); //9
}); //10
var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); //11
Environment.ExitCode = exitCode;
}
}
그리고 해당 명령어를 입력
.\TopShelfConsole.exe
.\TopShelfConsole.exe install
.\TopShelfConsole.exe uninstall