2

Windows 서비스를 개발했지만 설치시 자동으로 시작해야합니다. 문제는 내가 찾은 모든 자습서가 Setup Project을 통해 나를 보여주고 있다는 것입니다. 내 앱을 서비스로 변환하는 데 사용한 환상적인 3 부 자습서 HERE이 있지만 다른 프로젝트 유형에는 Setup Project이 없습니다. 프로그래밍 방식으로이 작업을 수행 할 수 있습니까? 아니면 Setup Project 프로젝트 유형을 얻을 수 있습니까?설치 프로젝트없이 설치시 Windows 서비스 시작

+0

어떻게 설치하나요? – oleksii

답변

1

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을 실행하면 설치 한 다음 서비스를 시작합니다.

MSDN link for more details

0

Windows 7 이상을 대상으로하는 경우 Powershell이 ​​기본적으로 설치됩니다. 하나의 옵션은 서비스 설치를 시작하는 간단한 파워 쉘 스크립트를 실행하고, 시스템이 재부팅 될 경우 서비스를 자동으로 시작하도록 설정합니다 할

InstallUtil yourService.exe 
Start-Service yourService 
Set-Service yourService -startuptype "Automatic" 
+0

질문을 원하면 대답이 아닌 대답을 사용하십시오. – DavidG

+0

@Noel 저는 윈도우를 목표로하고 있습니다. 저는 7 명이라고 생각합니다. 서버 재부팅시 초기에 서비스를 시작하는 것을 기억해야하는 네트워크 사용자를 피하려고합니다. InstallUtil 앱을 쉽게 실행할 수 있습니다.exe는 '서버 사이클에 명령을하지만, 그 피하려고합니다. – Volearix

0

가장 좋은 방법은 설치 사업 확장에 추가하는 것입니다!

설치 프로젝트 유형은 VS 2010 년 이후 사용되지 않습니다,하지만 다음과 같은 의견을 마이크로 소프트는 마이크로 소프트에서 새로운 설치 사업 확장 설치

VS 2013에 대한 새로운 버전을 다시 가져왔다 : https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d

이 작동한다 (새로운 무료 커뮤니티 에디션 SDK 포함) 비주얼 스튜디오 2013

그럼 당신은 단지 VS 2010 설치 프로젝트 :

,536,913,632와 동일한 지침을 따를 수의 비 익스프레스 버전 10

VS2012에 대한 쉬운 옵션이 없습니다 (WiX와 함께 설치 프로그램을 시도해 볼 수는 있겠지만, 많은 것을 배울 수 있습니다!) InstallShield LE (무료 버전 VS2012)가이 상황에서 작동하는지 모르겠습니다. ,하지만 당신은 그것을 시도 줄 수 있습니다.

설치가 끝나면 언제든지 서비스의 시작 유형을 변경할 수 있습니다. (제어판 -> 관리 도구 -> 서비스 -> 오른쪽 클릭 서비스 -> 속성 -> "시작 유형"을 "자동"으로 변경하십시오)

+0

Crud. 그게 해결책이라고 생각했는데, 나는 VS2012에있다. 이를 반영하기 위해 태그를 업데이트했습니다. – Volearix

+0

흠. 업그레이드 시간은? –

+0

불행히도 나는이 회사에서 그런 일이 일어나지 않는다고 본다. >. < – Volearix

1

나는 Topshelf 프로젝트에 기본 제공 서비스 설치 프로그램/제거 프로그램이 있다고 생각합니다. 응용 프로그램에 통합되면 응용 프로그램 자체에서 간단한 명령을 통해 서비스로 설치할 수 있습니다. 예를 들어 myService.exemyService.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");     
     });          
    } 
} 

:

우리는 단순히 자체 설치 서비스를 만들 수 있습니다, 여기에 예입니다.