Topshelf 애플리케이션을 Windows 서비스로 설치
Visual Studio Express 2012를 사용하여 Topshelf (버전 3.1.107.0)를 사용하여 콘솔 응용 프로그램을 만들었습니다. 응용 프로그램은 콘솔 응용 프로그램으로 작동하지만 서비스로 설치하는 방법을 알 수 없습니다. Visual Studio (Build, Publish)에서 프로젝트를 게시하고 관리자 권한으로 명령 프롬프트를 시작하고 애플리케이션이 게시 된 폴더로 이동 한 다음 명령 프롬프트에서 setup.exe -install을 실행합니다. 애플리케이션이 설치되고 실행되지만 Windows 서비스가 아닌 콘솔 애플리케이션으로 실행됩니다. 내가 여기서 무엇을 놓치고 있습니까?
Topshelf에 익숙하지 않은 사용자를 위해 .Net 용 Windows 서비스 프레임 워크이며 위에서 설명한 시나리오 (콘솔 애플리케이션으로 개발 및 디버그, Windows 서비스로 배포)를 용이하게합니다. http://docs.topshelf-project.com/en/latest/index.html 의 설명서를 참조하십시오 .
service.exe install
서비스를 설치하려면 실행하십시오 .
자세한 내용은 Topshelf 명령 줄 참조 문서를 참조하십시오.
- Visual Studio를 시작하고 새 C # 콘솔 응용 프로그램을 만듭니다.
- 참조를 마우스 오른쪽 버튼으로 클릭하고 NuGet-Packages 관리로 이동하십시오.
- NuGet을 통해 Topshelf 다운로드 및 설치
- 아래 코드를 애플리케이션에 붙여넣고 모든 가져 오기를 포함하세요.
- "디버그"모드에서 "릴리스"로 전환하고 애플리케이션을 빌드합니다.
cmd.exe
관리자 권한 으로 실행콘솔을 탐색하여
.\myConsoleApplication\bin\Release\
명령 실행
.\myConsoleApplication.exe install
명령 실행
.\myConsoleApplication.exe start
암호:
using System;
using System.Threading;
using Topshelf;
using Topshelf.Runtime;
namespace MyConsoleApplication
{
public class MyService
{
public MyService(HostSettings settings)
{
}
private SemaphoreSlim _semaphoreToRequestStop;
private Thread _thread;
public void Start()
{
_semaphoreToRequestStop = new SemaphoreSlim(0);
_thread = new Thread(DoWork);
_thread.Start();
}
public void Stop()
{
_semaphoreToRequestStop.Release();
_thread.Join();
}
private void DoWork()
{
while (true)
{
Console.WriteLine("doing work..");
if (_semaphoreToRequestStop.Wait(500))
{
Console.WriteLine("Stopped");
break;
}
}
}
}
public class Program
{
public static void Main()
{
HostFactory.Run(x =>
{
x.StartAutomatically(); // Start the service automatically
x.EnableServiceRecovery(rc =>
{
rc.RestartService(1); // restart the service after 1 minute
});
x.Service<MyService>(s =>
{
s.ConstructUsing(hostSettings => new MyService(hostSettings));
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("MyDescription");
x.SetDisplayName("MyDisplayName");
x.SetServiceName("MyServiceName");
});
}
}
}
폴더를 찾아 다음 명령을 실행하십시오.
AppName.exe install
관리자로 명령 프롬프트를 실행해야합니다.
그래서 이것은 오래된 질문이지만 몇 가지 명령 줄 옵션을 추가하고 싶습니다.
MyTopShelfImplementation.exe install -servicename "MyServiceName"-displayname "My Display Name"--autostart start
.
-자동 시작
Windows가 재부팅 될 때입니다.
스타트
설치 후 즉시 서비스를 시작하기위한 것입니다.
이제 코드에서 지정할 수도있는 "이름"
HostFactory.Run(x =>
{
////x.SetDescription("My Description");
x.SetDisplayName("My Display Name");
x.SetServiceName("My Service Name");
////x.SetInstanceName("My Instance");
따라서 .exe가 콘솔 앱 (또는 Windows 서비스)으로 실행되는 경우 코드에서 이러한 값을 설정하거나 명령 줄을 통해 전달하는 조합 일 수 있습니다.
코드에서 "이름"을 설정하지 않았고 명령 줄 인수로 "이름"을 전달하지 않은 경우 콘솔 동작이 발생합니다.
참고URL : https://stackoverflow.com/questions/18206738/installing-a-topshelf-application-as-a-windows-service
'programing' 카테고리의 다른 글
"사용자가 가입하도록 허용"을 비활성화 한 상태에서 Jenkins에 사용자 추가 (0) | 2020.12.04 |
---|---|
KeyValuePair 값을 수정하는 방법은 무엇입니까? (0) | 2020.12.04 |
HTML의 이미지 소스에서 이미지 회전 (0) | 2020.12.04 |
IntelliJ IDEA에서 .gitignore에 파일 / 폴더를 추가하는 방법은 무엇입니까? (0) | 2020.12.04 |
HttpURLConnection 잘못된 HTTP 메서드 : PATCH (0) | 2020.12.04 |