Windows 서비스를 개발했지만 설치시 자동으로 시작해야합니다. 문제는 내가 찾은 모든 자습서가 Setup Project
을 통해 나를 보여주고 있다는 것입니다. 내 앱을 서비스로 변환하는 데 사용한 환상적인 3 부 자습서 HERE이 있지만 다른 프로젝트 유형에는 Setup Project
이 없습니다. 프로그래밍 방식으로이 작업을 수행 할 수 있습니까? 아니면 Setup Project
프로젝트 유형을 얻을 수 있습니까?설치 프로젝트없이 설치시 Windows 서비스 시작
답변
Installer 클래스에서 AfterInstall 이벤트에 대한 처리기를 추가하십시오. 그런 다음 이벤트 핸들러에서 ServiceController를 호출하여 서비스를 시작할 수 있습니다.
public ServiceInstaller()
{
//... Installer code here
this.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall);
}
void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
{
using (ServiceController sc = new ServiceController(serviceInstaller.ServiceName))
{
sc.Start();
}
}
이제 설치 관리자에서 InstallUtil을 실행하면 설치 한 다음 서비스를 시작합니다.
Windows 7 이상을 대상으로하는 경우 Powershell이 기본적으로 설치됩니다. 하나의 옵션은 서비스 설치를 시작하는 간단한 파워 쉘 스크립트를 실행하고, 시스템이 재부팅 될 경우 서비스를 자동으로 시작하도록 설정합니다 할
InstallUtil yourService.exe
Start-Service yourService
Set-Service yourService -startuptype "Automatic"
가장 좋은 방법은 설치 사업 확장에 추가하는 것입니다!
설치 프로젝트 유형은 VS 2010 년 이후 사용되지 않습니다,하지만 다음과 같은 의견을 마이크로 소프트는 마이크로 소프트에서 새로운 설치 사업 확장 설치
VS 2013에 대한 새로운 버전을 다시 가져왔다 : https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d
이 작동한다 (새로운 무료 커뮤니티 에디션 SDK 포함) 비주얼 스튜디오 2013
그럼 당신은 단지 VS 2010 설치 프로젝트 :
,536,913,632와 동일한 지침을 따를 수의 비 익스프레스 버전 10VS2012에 대한 쉬운 옵션이 없습니다 (WiX와 함께 설치 프로그램을 시도해 볼 수는 있겠지만, 많은 것을 배울 수 있습니다!) InstallShield LE (무료 버전 VS2012)가이 상황에서 작동하는지 모르겠습니다. ,하지만 당신은 그것을 시도 줄 수 있습니다.
설치가 끝나면 언제든지 서비스의 시작 유형을 변경할 수 있습니다. (제어판 -> 관리 도구 -> 서비스 -> 오른쪽 클릭 서비스 -> 속성 -> "시작 유형"을 "자동"으로 변경하십시오)
나는 Topshelf 프로젝트에 기본 제공 서비스 설치 프로그램/제거 프로그램이 있다고 생각합니다. 응용 프로그램에 통합되면 응용 프로그램 자체에서 간단한 명령을 통해 서비스로 설치할 수 있습니다. 예를 들어 myService.exe
을 myService.exe install start
명령으로 쉽게 설치하고 시작할 수 있습니다. 당신이 PM> Install-Package Topshelf
Nuget 명령을 통해 Topshelf 얻을 수
public class ServiceClass
{
public ServiceClass()
{
}
public void Start() { }
public void Stop() { }
}
public class Program
{
public static void Main(string[] args)
{
//we can simply install our service by setting specific commands for same or install it directly from command line or from another process
if (args.Length == 0)
{
var processName = Process.GetCurrentProcess().ProcessName + ".exe";
var install = Process.Start(processName, "install start");
install.WaitForExit();
return;
}
HostFactory.Run(x =>
{
x.Service<ServiceClass>(s =>
{
s.ConstructUsing(name => new ServiceClass());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Topshelf Host");
x.SetDisplayName("TopShelf");
x.SetServiceName("TopShelf");
});
}
}
:
우리는 단순히 자체 설치 서비스를 만들 수 있습니다, 여기에 예입니다.
어떻게 설치하나요? – oleksii