오류 5 : Windows 서비스를 시작할 때 액세스가 거부되었습니다.


97

C #에서 만든 Windows 서비스를 시작하려고하면이 오류가 발생합니다.

대체 텍스트

지금까지 내 코드 :

private ServiceHost host = null;

public RightAccessHost()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    host = new ServiceHost(typeof(RightAccessWcf));
    host.Open();
}

protected override void OnStop()
{
    if (host != null)
        host.Close();
    host = null;
}

업데이트 # 1

NETWORK SERVICE 계정에 권한을 부여하여 위의 문제를 해결 했지만 이제 다른 문제가 있습니다.

대체 텍스트

업데이트 # 2

서비스를 시작할 수 없습니다. System.InvalidOperationException : 서비스 'RightAccessManagementWcf.RightAccessWcf'에 애플리케이션 (비 인프라) 엔드 포인트가 없습니다. 이는 애플리케이션에 대한 구성 파일이 없거나 구성 파일에서 서비스 이름과 일치하는 서비스 요소를 찾을 수 없거나 서비스 요소에 정의 된 엔드 포인트가 없기 때문일 수 있습니다. System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (ServiceDescription description) at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (ServiceDescription description, ServiceHostBase serviceHost) at System.ServiceModel.ServiceHostBase.InitializeRuntime () at System.ServiceModel.ServiceHostBase.OnOpen () System.ServiceModel.Channels.CommunicationObject에서 TimeSpan 시간 초과).


2
두 번째 문제는 그 메시지만으로는 해결하기 쉽지 않습니다. 이벤트 로그를 살펴보고 실제 오류가 무엇인지 확인해야합니다.
Matt Ellen

1
시스템 계정에 폴더에 대한 액세스 권한이 있는지 확인하십시오.
개발자

답변:


116

이 게시물이 오래되었다는 것을 알고 있지만 표시된 해결책이 없으며이 문제를 어떻게 해결했는지 설명하고 싶었습니다.

첫 번째 Error 5: Access Denied오류는 출력 디렉토리에 대한 권한을NETWORK SERVICE 계정에 .

두번째 Started and then stopped 오류는 서비스에 장애가 발생했을 때 발생하는 일반적인 메시지 인 것 같습니다. 이벤트 뷰어 (특히 'Windows 로그> 애플리케이션')에서 실제 오류 메시지를 확인하십시오.

제 경우에는 app.config의 잘못된 서비스 구성 설정이었습니다.


7
탐색기를 사용하여 폴더로 이동하고 속성, 보안을 마우스 오른쪽 단추로 클릭 한 다음 사용자 이름 목록에서 NETWORK SERVICE 계정에 올바른 권한을 할당하여 권한을 수정했습니다.
Justin Skiles 2011

"오류 5"에 대한 제 경우에는 네트워크 서비스에 실행 파일의 폴더에 대한 액세스 권한이 없습니다. 개발 용이기 때문에 파일을 Program File 폴더에 넣지 않고 dev 컴퓨터에서 파일을 복사 할 수있는 공유 폴더에 저장하고 싶었습니다. 네트워크 서비스에 읽기 / 실행 / 목록의 권한을 부여하는 것만으로도 충분합니다.
ZZZ

5
! 나는 LOCAL 서비스 "와"내 빈에 NETWORK SERVICE "\ Debug 폴더와 작품, 감사합니다 추가
Hernaldo 곤잘레스

3
참고 : 권한을 변경해도 문제가 해결되지 않으면 이벤트 뷰어에서 오류를 확인하십시오. 서비스 시작을 방해하는 완전히 관련이없는 SQL 오류가 발생했지만 여전히 "오류 5 : 액세스가 거부되었습니다."라는 메시지가 표시됩니다. 오류.
dtryan 2011

"이벤트 뷰어"에 대한 메모 주셔서 감사합니다 - 저와 같은 관련없는 오류 "(5) 액세스가 거부되었습니다" "엔드 포인트를 찾을 수 없습니다"하지만 같은 매스 커 레이드
데이비드 Votrubec

26

컴퓨터-> 관리-> 서비스-> [내 서비스] 속성. 그런 다음 계정 정보가있는 탭입니다. 관리자 계정으로 서비스를 실행하는 것과 같은 설정을 사용하십시오.

그것은 나를 위해 해냈습니다.

편집 : 또한 문제가 될 수있는 것은 대부분의 서비스가 LOCAL SERVICE또는 LOCAL SYSTEM계정 으로 실행된다는 것 입니다. 이제 C:/my-admin-dir/service.exe해당 계정으로 실행 했지만 해당 디렉토리에서 아무것도 실행할 수없는 경우 error 5. 따라서 서비스 실행 파일을 찾고 디렉터리를 RMB-> 속성-> 보안하고 서비스가 실행되는 계정이 디렉터리를 완전히 제어 할 수있는 사용자 목록에 있는지 확인합니다.


21

이것은 나를 위해 일했습니다.

  1. 서비스 실행 파일이 포함 된 최상위 폴더를 마우스 오른쪽 버튼으로 클릭합니다. 속성으로 이동
  2. "보안"탭으로 이동
  3. "편집"을 클릭하십시오
  4. "추가"를 클릭하십시오.
  5. "SYSTEM"이름을 입력하고 확인을 클릭합니다.
  6. 시스템 사용자를 강조 표시하고 "모든 권한"옆에있는 허용 확인란을 클릭합니다.
  7. 확인을 두 번 클릭하십시오.

11
"SYSTEM"이 저에게 효과가 없었습니다. 그냥 도박을하고 "SERVICE"를 시도했습니다. 그게 트릭이었습니다.
Exter 2014-04-14

4
"SERVICE"를 추가하고 "모든 권한"을 부여하는 것이 저에게
Fredrik

내 ProjectInstaller의 ServiceProcessInstaller 계정 속성이 LocalService로 설정 되었기 때문에 로컬 서비스 계정에 대한 전체 권한을 부여했고 그게 트릭이었습니다!
Dave

14

또한 동일한 오류가 발생했습니다. 서비스> 속성> 로그온> 다음으로 로그온 : 로컬 시스템 계정을 마우스 오른쪽 버튼으로 클릭하여 해결했습니다.


감사. tor.exe --service start에 문제가 있었는데 이제 매력처럼 작동합니다!
Arman Karimi

나를 위해 일했습니다. 그러나 어쨌든 이것을 프로그래밍 방식으로 지정할 수 있습니까?
Sisir

알았다. serviceProcessInstaller-> 속성-> 계정을 마우스 오른쪽 버튼으로 클릭하고 기본 "사용자"대신 "LocalSystem"으로 설정합니다. 서비스와 짜잔을 설치하십시오.
Sisir

10

Path to executable실제 실행 파일을 가리키는 지 확인하십시오 (서비스-> 속성-> 일반 탭을 마우스 오른쪽 버튼으로 클릭). powershell (및 sc.exe)을 통해 실제 실행 파일을 가리 키지 않고 서비스를 설치할 수 있습니다 ... ahem.


실수로 .exe 파일 대신 폴더를 남겨 두었습니다. 이 문제를 해결하려면 "sc delete servicenameXYZ"+ 서버를 다시 시작하여 서비스를 완전히 삭제하고 올바른 서비스 .exe 파일을 다시 설치해야했습니다. 그러면 매력처럼 시작됩니다. 이 게시물에 대한 고맙습니다.
Honza P.

넌 나를 구했다! 실행 가능한 전체 경로 대신 폴더 할당 중 ... Arghhhh! ... 더 봤어야
ilter

9

나는 해결책을 얻었다.

1. Go to local service window(where all services found)
2. Just right click on your service name: 
3. click on "properties" 
4. go to "log on" tab
5. select "local system account"
6. click "ok"

이제 서비스를 시작할 수 있습니다.


1
이미 "로컬 시스템 계정"을 선택했는데 여전히 메시지가 나타납니다.
user2568374

5

여기에서 허용 된 답변을 잘못 읽었 기 때문에이 오류가 발생했습니다 .Create Windows service from executable .

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

를 들어 <path_to_service_executable>, 내가 예를 들어, 실행 파일의 폴더의 경로를 사용했다 C:\Folder.

예를 들어 실행 파일의 경로 여야합니다C:\Folder\Executable.exe .


4

내 경우에는 다음이 확인되지 않았습니다.

여기에 이미지 설명 입력


2
저와 같은 다른 독자 :이 스크린 샷은 서비스 속성 창의 일부입니다! 서비스 창 (실행 : services.msc)을 열고 서비스를 마우스 오른쪽 버튼으로 클릭하면 나타나는 컨텍스트 메뉴에서 속성을 선택합니다!
MohaMad

3

나에게는 서비스가 실행될 폴더와 그 안의 파일이 Windows "암호화"옵션을 사용하여 암호화되었습니다. 그것을 제거하고-짜잔!


이것은 나에게 문제로 판명되었습니다-내가 사용하고 있던 서버의 광대 시스템 관리자는 모든 디렉토리가 기본적으로 NTFS 암호화를 갖도록 약간의 손잡이를 돌려서 LocalSystem은 실제로 읽을 암호화 키를 가지고 있지 않습니다.
KJ Tsanaktsidis

3

이 오류는 OnStart메서드에 오류가있을 때 발생합니다 . 호스트 OnStart는 호출 될 때 실제로 열리지 않고 대신 제어를 기다릴 것이기 때문에 메소드 에서 직접 호스트를 열 수 없습니다 . 따라서 스레드를 사용해야합니다. 이것이 제 예입니다.

public partial class Service1 : ServiceBase
{
    ServiceHost host;
    Thread hostThread;
    public Service1()
    {
        InitializeComponent();
         hostThread= new Thread(new ThreadStart(StartHosting));

    }

    protected override void OnStart(string[] args)
    {
        hostThread.Start();
    }

    protected void StartHosting()
    {
        host = new ServiceHost(typeof(WCFAuth.Service.AuthService));
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}

3

액세스 거부 오류 코드 5가있는 경우 아마도 코드에서 서비스가 로그 파일에 쓰는 것과 같은 시스템의 일부 파일과 상호 작용하려고 할 것입니다.

서비스 속성 선택 log on탭을 열고 서비스 가 데스크톱과 상호 작용할 수 있도록 옵션을 선택합니다. 서비스가 데스크톱과 상호 작용하도록 허용을 클릭하십시오.


3

필자의 경우 실행 파일이 설치된 폴더의 '그룹 또는 사용자 이름'목록에 '인증 된 사용자'를 추가해야했습니다.


3

이 오류의 원인 중 하나는 로컬 폴더의 권한 (인증 된 사용자)이 충분하지 않기 때문입니다. '인증 된 사용자'에 대한 권한을 부여하려면 폴더 속성에서 보안 탭을 열고 '인증 된 사용자'그룹을 편집 및 추가하고 변경 사항을 적용합니다.

이 작업이 완료되면 네트워크 서비스 계정을 통해서도 서비스를 실행할 수있었습니다 (이전에는 로컬 시스템 계정으로 만 실행할 수있었습니다).


2

OWIN 및 TopShelf를 사용하여 Windows 서비스를 호스팅했습니다. 시작할 수 없었습니다. 같은 오류- "액세스 거부 5"

결국 모든 파마를 내 bin / Debug에 제공했습니다.

문제는 여전히 해결되지 않았습니다.

그래서 이벤트 로그를 Microsoft.Owin.Host.HttpListener살펴본 결과 OWIN 시작 클래스를 포함하는 클래스 라이브러리에 포함되지 않은 것으로 나타났습니다 .

따라서 perms 등을 시작하기 전에 이벤트 로그를 확인하여 근본 원인을 확인하십시오.


2
좋은 점- "액세스 거부"오류는 권한과 관련이 없을 수 있습니다. 항상 이벤트 뷰어에서 응용 프로그램 로그를 확인하십시오.
mhenry1384

안녕하세요, 나는 또한 이것을 확인하고 있습니다.`. \ logs` 경로는 어디에 있습니까? 내가 topshelf에서 로깅하고 있지만 거기에는 없습니다
Transformer

1

서비스를 시작할 수없는 사용자의 보안 컨텍스트에서 코드가 실행 중일 수 있습니다.

WCF를 사용하고 있기 때문에 NETWORK SERVICE의 컨텍스트에 있다고 생각합니다.

참조 : http://support.microsoft.com/kb/256299


1
출력 디렉토리에 대한 "LOCAL SERVICE"및 "NETWORK SERVICE"권한을 부여했습니다
Kris-I

또한 시스템 서비스에 대한 그룹 정책을 설정해야합니다. support.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji 2010

1

서비스 설치 프로그램에서 LocalService 계정 대신 LocalSystem 계정을 사용하십시오.

서비스 설치 프로그램의 디자인보기에서 아래 변경을 수행하여이 작업을 수행 할 수 있습니다.
서비스 프로세스 설치 프로그램의 속성-> 계정을 LocalSystem으로 설정합니다.

또는 서비스 설치 프로그램의 designer.cs 파일에서 아래 변경을 수행하십시오.

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

1

serviceservice.msc에서 마우스 오른쪽 버튼을 클릭 하고property 합니다.

아래에 폴더 경로가 표시됩니다. Path to executableC : \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe와 같은 .

C : \ Users \ Me \ Desktop \ project \ Tor로 이동하여 Tor를 마우스 오른쪽 버튼으로 클릭합니다.

선택 property, security, edit다음 add. 텍스트 필드에를 입력 LOCAL SERVICE하고 확인을 클릭 한 다음 상자를 선택합니다.FULL CONTROL

add다시 클릭 한 다음을 입력하고을 NETWORK SERVICE클릭 한 다음 ok확인란을 선택합니다.FULL CONTROL

그런 다음 확인 (하단)을 클릭합니다.


0

한 번 봐 가지고 Process Utilities > Process monitor에서 http://www.sysinternals.com을 .

프로세스가 수행하는 작업을 모니터링 할 수있는 도구입니다. 이 서비스 프로세스를 모니터링하면 어딘가에서 액세스가 거부되고 액세스가 거부 된 리소스가 무엇인지 확인할 수 있습니다.


0

오류 5의 경우 위의 솔루션과 반대로 수행했습니다. "첫 번째 오류 5 : 액세스 거부 오류는 출력 디렉터리에 대한 권한을 NETWORK SERVICE 계정에 부여하여 해결되었습니다."

네트워크 서비스 계정 대신 로컬 계정으로 변경했는데 관리자로 로그인했기 때문에 작동했습니다.


0

서버 시스템에서이 오류가 발생하면 실제 Windows 서비스 exe가있는 폴더에 대한 액세스 권한을 부여하십시오. 보안 탭으로 이동하여 사용자로 로컬 서비스를 선택하고 전체 액세스 권한을 부여해야합니다. exe에 대해서도 똑같이해야합니다.


0

프로세스 모니터를 사용하여 sppsvc.exe를 모니터링 한 결과 HKEY_LOCAL_MACHINE \ SYSTEM \ WPA 키에 쓰려고한다는 것을 알았습니다. 이 키에 대해 NETWORK SERVICE에 권한을 부여한 후 서비스를 시작할 수 있었고 Windows가 갑자기 다시 활성화되었음을 인식했습니다.


0

Local service솔루션으로 전환하는 것이기 때문에 실수로 내 서비스를 실행 하도록 설정했습니다.Local System


0

이것을 알아 내려고 몇 시간 동안 내 책상에 내 소유물을 두드린 후, 어떻게 든 내 "Main"메소드가 코드를 비 웠습니다!

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new DMTestService()
};
ServiceBase.Run(ServicesToRun);

내가 찾은 다른 솔루션 :

  • .NET Framework를 4.0으로 업데이트
  • InitializeComponent () 내의 서비스 이름이 설치 프로그램 서비스 이름 속성과 일치하는지 확인

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • 그리고 멋진 서버 재시작은 아프지 않습니다.

Szhlopp



0

나는 오늘 내가 개발하고있는 서비스에 대해이 문제를 가지고 있었고이 질문에 대한 다른 제안은 효과가 없었습니다. 제 경우에는 서비스가 실행 된 폴더에 .dll 종속성이 누락되었습니다.

종속성을 추가하면 문제가 사라졌습니다.


0

제 경우에는 프로젝트를 데스크톱에 보관하고 데스크톱에 액세스하려면 폴더에 대한 권한을 추가해야하므로 프로젝트 폴더를 C : \ 디렉터리로 옮겼습니다. 이제 매력처럼 작동합니다.


0

내 대답이 많은 사람들에게 의미가 있을지 모르겠지만 나도 같은 문제에 직면했고 해결책은 엄청나게 간단했습니다. 내가해야 할 일은 관리자로 코드를 실행하는 데 사용했던 프로그램을 여는 것뿐이었습니다. (마우스 오른쪽 버튼 클릭-> 관리자 권한으로 실행).

그게 전부였다.


0

오류 팝업에서 알 수 있듯이 이것은 권한과 관련이 있습니다. 따라서 서비스를 "LocalSystem"계정으로 실행하십시오.

동일한 작업을 수행하려면을 마우스 오른쪽 단추로 클릭 하고 기본값 대신로 serviceProcessInstaller -> Properties -> Account설정하십시오 . 서비스와 짜잔을 설치하십시오."LocalSystem""User"


이것은 입증 된 작업 수정이며 해결 방법이 아닙니다. 다른 사람들이 이해하기 다운 유권자는 혐오의 이유를 설명시겠습니까
Sisir

0

자세한 오류 메시지는 Windows 이벤트 로그를 확인하십시오. 이벤트 로그를 확인한 후 동일한 문제를 해결했습니다.


-1

배포중인 서비스에이 문제가 있었지만이 질문에 대한 다른 제안은 효과가 없었습니다. 제 경우에는 .config (xml)가 유효하지 않았기 때문입니다. qualif에서 prod로 복사 할 때 복사 및 붙여 넣기 오류가 발생했습니다.

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