programing

Visual Studio에서 생성된 Windows 서비스 설치

padding 2023. 4. 23. 10:06
반응형

Visual Studio에서 생성된 Windows 서비스 설치

Visual Studio 2010에서 새 Windows 서비스를 생성하면 InstallUtil을 사용하여 서비스를 실행하라는 메시지가 나타납니다.

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

  1. 새 프로젝트 파일 만들기 -> 새로 만들기 -> 프로젝트 -> Windows 서비스
  2. 프로젝트명:테스트 서비스
  3. 프로젝트를 그대로 빌드(Service1 컨스트럭터, OnStart, OnStop)
  4. 명령 프롬프트를 열고 "C:"를 실행합니다.\Windows\Microsoft.NET\Framework\v4.0.30319\Install Util.exe" 테스트 서비스.실행
  5. net start Test Service를 실행합니다.

스텝 4의 출력

트랜잭션된 설치 실행.

인스톨의 인스톨 단계를 개시합니다.

C: 로그 파일의 내용을 참조해 주세요.\Users\myusername\문서\Visual Studio 2010\프로젝트\테스트 서비스\테스트 서비스\obj\x86\디버깅\테스트 서비스exe 어셈블리의 진행 상황.

파일은 C:에 있습니다.\Users\myusername\문서\Visual Studio 2010\프로젝트\Tes t Service \테스트 서비스\obj\x86\디버깅\테스트 서비스인스톨 로그.

어셈블리 'C: 설치 중:\Users\myusername\문서\Visual Studio 2010\프로젝트\TestS 서비스\테스트 서비스\obj\x86\디버깅\TestService.exe' 입니다.

영향을 받는 파라미터는 다음과 같습니다.

logtoconsole =

로그 파일 = C:\Users\myusername\문서\Visual Studio 2010\프로젝트\테스트 서비스\테스트 서비스\obj\x86\디버깅\테스트 서비스인스톨 로그

assemblypath = C:\Users\myusername\문서\Visual Studio 2010\프로젝트\TestServ 얼음\테스트 서비스\obj\x86\디버깅\테스트 서비스실행

RunInstallerAttribute를 가진 퍼블릭인스톨러가 없습니다.Yes Attribute는 C:에서 찾을 수 있습니다.\Users\myusername\문서\Visual Studio 2010\프로젝트\테스트 서비스\TestSe revice\obj\x86\Debug\테스트 서비스exe 어셈블리

설치 단계가 정상적으로 완료되어 커밋 단계가 시작되고 있습니다.

C: 로그 파일의 내용을 참조해 주세요.\Users\myusername\문서\Visual Studio 2010\프로젝트\테스트 서비스\테스트 서비스\obj\x86\디버깅\테스트 서비스exe 어셈블리의 진행 상황.

파일은 C:에 있습니다.\Users\myusername\문서\Visual Studio 2010\프로젝트\Tes t Service \테스트 서비스\obj\x86\디버깅\테스트 서비스인스톨 로그.

어셈블리 'C:를 커밋하는 중:\Users\myusername\문서\Visual Studio 2010\프로젝트\TestS 서비스\테스트 서비스\obj\x86\디버깅\TestService.exe' 입니다.

영향을 받는 파라미터는 다음과 같습니다.

logtoconsole =

로그 파일 = C:\Users\myusername\문서\Visual Studio 2010\프로젝트\테스트 서비스\테스트 서비스\obj\x86\디버깅\테스트 서비스인스톨 로그

assemblypath = C:\Users\myusername\문서\Visual Studio 2010\프로젝트\TestServ 얼음\테스트 서비스\obj\x86\디버깅\테스트 서비스실행

RunInstallerAttribute를 가진 퍼블릭인스톨러가 없습니다.Yes Attribute는 C:에서 찾을 수 있습니다.\Users\myusername\문서\Visual Studio 2010\프로젝트\테스트 서비스\TestSe revice\obj\x86\Debug\테스트 서비스exe 어셈블리

설치 관리자가 없으므로 InstallState 파일을 제거합니다.

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

트랜잭션된 설치가 완료되었습니다.

순서 5의 출력

서비스 이름이 잘못되었습니다.

자세한 내용은 NET HELPMSG 2185를 입력해 주세요.

디자이너에서 Service.cs 파일을 열고 마우스 오른쪽 버튼을 클릭한 후 메뉴 옵션 "Add Installer"를 선택합니다.

개봉 후 바로 설치할 수 없습니다.먼저 설치 클래스를 만들어야 합니다.

서비스 인스톨러에 관한 참조:

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

꽤 오래된...하지만 이게 바로 내가 말하고자 하는 거야

C#의 Windows 서비스: 설치 추가(파트 3)

하면 '''가 '''는ProjectInstaller.cs자동으로 생성됩니다.그런 다음 이 항목을 두 번 누르고 디자이너를 입력한 다음 구성 요소를 구성할 수 있습니다.

  • serviceInstaller1에는 서비스.「 」 。Description,DisplayName,ServiceName ★★★★★★★★★★★★★★★★★」StartType가장 중요합니다.

  • serviceProcessInstaller1성질이 .Account이 계정은 서비스를 실행하는 계정입니다.

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

this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;

보기:

RunInstallerAttribute를 가진 퍼블릭인스톨러가 없습니다.Yes Attribute는 C:에서 찾을 수 있습니다.\Users\myusername\문서\Visual Studio 2010\프로젝트\테스트 서비스\TestSe revice\obj\x86\Debug\테스트 서비스exe 어셈블리

을 사용법다음에서 상속되는 클래스입니다.Installer 수 있다installutil실행 파일을 서비스로 설치하는 방법을 참조하십시오.

P.s. 코드를 복사하거나 사용할 수 있는 자체 설치/디버깅 가능한 Windows Service 템플릿이 있습니다: 디버깅 가능, 자동 설치 Windows Service

다음은 설치 관리자를 만들고 오류 메시지를 제거하는 대체 방법입니다.또한 VS2015 Express에는 "Add Installer" 메뉴 항목이 없는 것 같습니다.

클래스를 만들고 아래 코드를 추가하고 참조 시스템을 추가하기만 하면 됩니다.배열.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);
        }
    }
}

일반적인 두 가지 문제:

  1. 프로젝트 누락설치 클래스(@MiguelAngelo가 지적한 대로)
  2. 명령 프롬프트가 "관리자로서 실행"되어야 합니다.

또 다른 생각할 수 있는 문제(우연히 발생)는 다음과 같습니다.

반드시 다음 사항을 확인해 주세요.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을 사용하고 있습니다.

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

RunInstallerAttribute를 가진 퍼블릭인스톨러가 없습니다.Yes 속성을 찾을 수 있습니다.

에일리어스 변경 또는 컴파일러 청소가 있습니다.특정 케이스에 대한 이 작은 수정 사항을 드러내는 NET.

다음과 같은 코드가 있는 경우…

RunInstaller(true)   // old alias  

갱신할 필요가 있는 경우가 있습니다.

RunInstallerAttribute(true)  // new property spelling

컴파일 시 또는 런타임에 에일리어스가 변경되어 이 에러 동작이 발생합니다.위의 RunInstallerAttribute(true)에 대한 명시적인 변경으로 모든 머신에 대한 모든 설치 시나리오에서 수정되었습니다.

프로젝트 또는 서비스 설치 관리자를 추가한 후 이전 RunInstaller(true)를 확인하고 새 RunInstallerAttribute(true)로 변경합니다.

또 하나, 인스톨러에서 파생된 클래스(통상은)를 확인해 주세요.ProjectInstaller)는 네임스페이스 계층의 상위에 있으며 다른 퍼블릭클래스 내에서 퍼블릭클래스를 사용하려고 했는데, 이 결과 다음과 같은 오래된 오류가 발생합니다.

RunInstallerAttribute를 가진 퍼블릭인스톨러가 없습니다.Yes 속성을 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/7922105/install-windows-service-created-in-visual-studio

반응형