2010-01-15 11 views
37

installutil.exe를 사용하지 않고 프로그래밍 방식으로 Windows 서비스를 설치하려면 어떻게해야합니까?프로그래밍 방식으로 Windows 서비스 설치

+0

타사 설치 프로그램을 사용하고 있지 않습니까? –

+0

옙 .... 나는 installservice()와 같은 함수를 사용할 수 있으면 좋겠다. windowsservice.exe를 두 번 클릭하면, 설치되지 않았 으면 설치되었는지 여부를 확인한다. – Josh

+1

은 좋은 기능 중 하나입니다 :) :) – Danail

답변

54

(프로그램 파일은 Program.cs)는 자체 설치 기사, 그리고 그것은 잘 작동합니다.

Windows Services Can Install Themselves

+0

해당 링크가 작동하지 않습니다. –

+6

"저수준"advapi32.dll을 사용하는 대신 명확하고 적합한 방법이지만 프레임 워크 설명서에 "이 API는 .NET Framework 인프라를 지원하며 사용자 코드에서 직접 사용할 수 없습니다."라고 명시되어 있습니다. 그러나 나는 여전히 "ManagedInstallerClass"와 새로운 .net 버전에서 미래의 비 호환성의 위험을 선호합니다. (http://msdn.microsoft.com/ep-br/library/system.configuration.install.managedinstallerclass) – Luciano

3

내가 예를 들어, 설치 명령 줄을 통해 내 Windows 서비스를 제거 MyWindowsService.exe -installMyWindowsService.exe -uninstall, installutil.exe 자신을 사용하지 않도록합니다. 이 작업을 수행하는 방법에 대한 지침을 작성했습니다 here. 나는 다음과 같은 CodeProject의에서 방법을 사용

/// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main(string[] args) 
     { 
      if (System.Environment.UserInteractive) 
      { 

       if (args.Length > 0) 
       { 
        switch (args[0]) 
        { 
         case "-install": 
          { 
           ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location }); 
           break; 
          } 
         case "-uninstall": 
          { 
           ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); 
           break; 
          } 
        } 
       } 
      } 
      else 
      { 
       ServiceBase[] ServicesToRun; 
       ServicesToRun = new ServiceBase[] { new MyService() }; 
       ServiceBase.Run(ServicesToRun); 
      } 
     } 
+0

OP는 명령 행을 통하지 않고 프로그래밍 방식으로이 작업을 수행하는 방법을 물었습니다. – Mike

+0

내 솔루션은 허용 된 대답과 동일한 방법으로 명령 줄을 통해 액세스 할 수있는 프로그래밍 방식의 솔루션입니다. –

9

: 지정된 매개 변수를 사용하여 명령 줄에서 실행할 때

당신이 코드를 추가하여 서비스를 설치할 수 있습니다
+2

위대한 링크; 그러나 마흐무드 나스 르 (Mahmoud Nasr)가 작성한 링크가 깨 졌음을 나타냅니다. 나는 이것을 사용했고 그것은 나를 위해 일한다. https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 –

+1

이 링크는 대답 할 수 있지만 질문에 대답의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 더 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 게시물/18705889) – amod

관련 문제