Visual Studio에서 만든 Windows 서비스 설치


136

Visual Studio 2010에서 새 Windows 서비스를 만들 때 InstallUtil 및 net start를 사용하여 서비스를 실행하라는 메시지가 나타납니다.

다음 단계를 시도했습니다.

  1. 새 프로젝트 파일 만들기-> 새로 만들기-> 프로젝트-> Windows 서비스
  2. 프로젝트 이름 : TestService
  3. 있는 그대로 프로젝트 빌드 (Service1 생성자, OnStart, OnStop)
  4. 명령 프롬프트를 열고 "C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe"TestService.exe를 실행하십시오.
  5. net start TestService를 실행하십시오 .

4 단계의 결과

트랜잭션 설치 실행

설치의 설치 단계 시작

C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe 어셈블리 진행에 대한 로그 파일 내용을 참조하십시오.

파일은 C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog에 있습니다.

어셈블리 'C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'설치

영향을받는 매개 변수는 다음과 같습니다.

logtoconsole =

로그 파일 = C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService.InstallLog

assemblypath = C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe

C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe 어셈블리에서 RunInstallerAttribute.Yes 특성이있는 공용 설치 관리자를 찾을 수 없습니다.

설치 단계가 완료되었으며 커밋 단계가 시작됩니다.

C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe 어셈블리 진행에 대한 로그 파일 내용을 참조하십시오.

파일은 C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog에 있습니다.

어셈블리 'C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'커밋

영향을받는 매개 변수는 다음과 같습니다.

logtoconsole =

로그 파일 = C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService.InstallLog

assemblypath = C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe

C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe 어셈블리에서 RunInstallerAttribute.Yes 특성이있는 공용 설치 관리자를 찾을 수 없습니다.

설치 프로그램이 없으므로 InstallState 파일을 제거하십시오.

커밋 단계가 성공적으로 완료되었습니다.

처리 된 설치가 완료되었습니다.

5 단계의 결과

서비스 이름이 유효하지 않습니다.

NET HELPMSG 2185를 입력하면 추가 도움말을 볼 수 있습니다.

답변:


243

디자이너에서 Service.cs 파일을 열고 마우스 오른쪽 단추로 클릭 한 다음 메뉴 옵션 "Add Installer"를 선택하십시오.

즉시 설치되지는 않습니다 ... 먼저 설치 관리자 클래스를 만들어야합니다.

서비스 설치 프로그램에 대한 일부 참조 :

방법 : 서비스 응용 프로그램에 설치 관리자 추가

아주 오래된 ...하지만 이것이 내가 말하는 것입니다 :

C #의 Windows 서비스 : 설치 관리자 추가 (3 부)

이렇게하면 a ProjectInstaller.cs가 자동으로 생성됩니다. 그런 다음이를 두 번 클릭하고 디자이너를 입력 한 후 구성 요소를 구성하십시오.

  • serviceInstaller1서비스 자체의 속성이 있습니다 Description, DisplayName, ServiceName그리고 StartType가장 중요하다.

  • serviceProcessInstaller1이 중요한 속성이 있습니다. Account즉, 서비스가 실행될 계정입니다.

예를 들면 다음과 같습니다.

this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;

3
설치 프로그램을 추가하고 계정을 LocalSystem으로 설정했습니다. 감사!
Luc

1
VS2013에서 동일한 오류가 발생합니다. 제공 한 링크를 확인하고 구성 요소 service [Process] Installer1을 포함하여 ProjectInstaller가 올바르게 구성되어 있는지 확인했습니다. installutil.exe를 관리자 권한으로 실행합니다. 여전히 "RunInstallerAttribute.Yes 속성을 가진 공용 설치 프로그램을 찾을 수 없습니다"라고보고합니다. 어떤 아이디어?
Barry Dysert

4
롤 "Quite old"링크는 Arcane Code라는 사이트에 대한 것입니다. 페이지가 오래
될수록

"디자이너"란 무엇입니까? UI가없는 응용 프로그램에는 일반적으로 디자이너라는 항목이 포함되지 않습니다.
Maxx

서비스에는 양식과 같은 디자이너도 있습니다
Grungondola

11

보고 :

C : \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe 어셈블리에서 RunInstallerAttribute.Yes 특성이있는 공용 설치 관리자를 찾을 수 없습니다.

코드에 설치 관리자 클래스가없는 것 같습니다. 이것은 클래스를 상속받은 클래스로 실행 파일을 서비스로 설치하는 방법을 Installer알려 installutil줍니다.

추신 : 나는 당신이 여기에서 코드를 복사하거나 사용할 수있는 작은 자체 설치 / 디버깅 가능한 Windows 서비스 템플릿을 가지고 있습니다 : Debuggable, Self-Installing Windows Service


Visual Studio-> 속성-> 서비스에서 TestService 프로젝트를 마우스 오른쪽 버튼으로 클릭하면 페이지가 비활성화됩니다 ... 다른 위치를 참조하고 있습니까? 응용 프로그램에서 어셈블리 이름은 TestService입니다.
jkh

@John : 서비스 콘솔에 대한 첫 번째 부분을 무시하고 Actually로 시작하는 두 번째 부분을보십시오 . 설치 프로그램을 찾지 못해 서비스가 설치되지 않은 것 같습니다.
James Michael Hare

8

다음은 설치 관리자를 만들고 해당 오류 메시지를 제거하는 다른 방법입니다. 또한 VS2015 express에는 "설치 프로그램 추가"메뉴 항목이없는 것 같습니다.

클래스를 만들고 아래 코드를 추가하고 참조 System.Configuration.Install.dll을 추가하기 만하면됩니다.

using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;


namespace SAS
{
    [RunInstaller(true)]
    public class MyProjectInstaller : Installer
    {
        private ServiceInstaller serviceInstaller1;
        private ServiceProcessInstaller processInstaller;

        public MyProjectInstaller()
        {
            // Instantiate installer for process and service.
            processInstaller = new ServiceProcessInstaller();
            serviceInstaller1 = new ServiceInstaller();

            // The service runs under the system account.
            processInstaller.Account = ServiceAccount.LocalSystem;

            // The service is started manually.
            serviceInstaller1.StartType = ServiceStartMode.Manual;

            // ServiceName must equal those on ServiceBase derived classes.
            serviceInstaller1.ServiceName = "SAS Service";

            // Add installer to collection. Order is not important if more than one service.
            Installers.Add(serviceInstaller1);
            Installers.Add(processInstaller);
        }
    }
}

VS2015도 실행하면이 솔루션을 통해 이전에 얻은 "RunInstallerAttribute.Yes를 사용하여 공개 설치 프로그램이 없습니다"라는 오류 메시지가 표시됩니다. 감사합니다!
PHBeagle

6

두 가지 일반적인 문제 :

  1. @MiguelAngelo가 지적했듯이 ProjectInstaller 클래스가 누락되었습니다.
  2. 명령 프롬프트 해야 "으로 실행 관리자 "

4

또 다른 가능한 문제 (내가 겪은) :

ProjectInstaller수업이 이어야합니다 public. 솔직히 말해서 정확히 어떻게했는지 확실하지 않지만 ProjectInstaller.Designer.cs다음과 같이 이벤트 핸들러를 추가했습니다 .

this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);

처리기 함수를 만드는 자동 프로세스 중에 ProjectInstaller.cs클래스 정의가 다음 과 같이 변경되었습니다.

public class ProjectInstaller : System.Configuration.Install.Installer

partial class ProjectInstaller : System.Configuration.Install.Installer

public키워드를로 교체 하십시오 partial. 따라서 문제를 해결하려면

public partial class ProjectInstaller : System.Configuration.Install.Installer

Visual Studio 2013 Community Edition을 사용합니다.


나는 이것이 3 년 후인 것을 알고 있지만 이것은 내 문제를 해결했다. 왜 또는 언제 디자이너가 이전 공개 부분 클래스를 내부 부분 클래스로 변경했는지 확실하지 않습니다. 감사합니다!
trashrobber

2

VS 2010 및 .NET 4.0 이상에서의 스텔스 변경

RunInstallerAttribute.Yes 속성이있는 공용 설치 프로그램을 찾을 수 없습니다.

.NET에는 별명 변경이나 컴파일러 정리가있어 특정 경우에 약간의 조정이있을 수 있습니다.

다음 코드가 있다면…

RunInstaller(true)   // old alias  

업데이트해야 할 수도 있습니다.

RunInstallerAttribute(true)  // new property spelling

컴파일 타임이나 런타임에 커버에서 변경된 별칭과 같 으며이 오류 동작이 발생합니다. RunInstallerAttribute (true)에 대한 위의 명시적인 변경은 모든 컴퓨터의 모든 설치 시나리오에서 수정되었습니다.

프로젝트 또는 서비스 설치 프로그램을 추가 한 후 "이전"RunInstaller (true)를 확인하고 새 RunInstallerAttribute (true)로 변경하십시오.


내 지식에 따라 "속성"접미사를 생략 할 수 있습니다. 즉 [RunInstaller (true)]와 [RunInstallerAttribute (true)]는 동일합니다. 다른 속성 (예 : [DebuggerStepThrough ()] 및 [DebuggerStepThroughAttribute ()])으로 시도해보십시오. 둘 다 클래스에 적용될 때 작동합니다.
Matt

1

또 다른 문제는 설치 프로그램 파생 클래스 (일반적으로 ProjectInstaller)가 네임 스페이스 계층 구조의 최상위에 있는지 확인 하고 다른 공개 클래스 내에서 공개 클래스를 사용하려고 시도했지만 이전과 동일한 오류가 발생한다는 것입니다.

RunInstallerAttribute.Yes 속성이있는 공용 설치 프로그램을 찾을 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.