2012-03-20 2 views
0

현재 작업중인 응용 프로그램의 디자인에서 데이터를 가져 와서 하드 드라이브에 저장하는 Windows 서비스에서 호스팅되는 WCF 서비스를 호출합니다. WCF 서비스와 상호 작용할 Windows 양식 응용 프로그램과 쌍을 이룹니다. 요구 사항 중 하나는 최종 사용자가 Forms 응용 프로그램을 통해 Windows 서비스를 다시 시작할 수 있어야한다는 것입니다.권한에 관계없이 Windows Forms 응용 프로그램이 Windows 서비스를 다시 시작하도록 허용하려면 어떻게해야합니까?

그래서 ServiceController 클래스를 사용하여이 작업을 수행 할 수 있다고 생각합니다.하지만 사용 권한은 어떻게됩니까? 나는 우리가 윈도우 앱이 관리자 권한으로 실행되고 서비스가 네트워크 서비스로 실행될 수 있다고 보장 할 수 없다고 생각한다.

상황을 커버하는 것으로 보이는 유일한 것은 다른 Windows 서비스가 실행 중이며 더 높은 권한을 가진 계정으로 설치 될 수 있으며 대상 서비스를 다시 시작할 수 있습니다.

하지만 특히 프로젝트가 지난 주에 베타 버전으로되어 있기 때문에 프로젝트에 그다지 복잡하지 않은 것을 추가하고 싶지 않습니다.

Forms 앱에 특정 컴패니언 서비스를 다시 시작하는 데 필요한 권한을 부여 할 수있는 방법이 있습니까?

후속 질문은 서비스와 동일한 컴퓨터가 아닌 서버에서 서비스가 실행되도록하는 행 아래입니다. Forms 앱이 서비스를 다시 시작하도록 허용하는 것이 비실용적입니까? 그렇다면 기능을 절단하는 것을지지 할 수도 있습니다 ...

아, 대상 플랫폼은 WinXP 및 Win7 with .NET4입니다.

답변

1

응용 프로그램에 권한을 부여하는 대신 시작 및 중지 할 서비스에 권한을 지정할 수 있습니다.

모든 Windows 서비스에는 서비스에서 수행 할 수있는 권한이 할당 된 보안 설명자가 있습니다. 기본적으로 서비스는 인증 된 사용자가 서비스 상태를 읽고 관리자가 서비스를 제어하고 삭제할 수있는 권한을 가지고 있습니다.

sc sdset <serviceName> 명령을 사용하여 서비스 보안 설명자를 설정할 수 있습니다. 예를 들어이 명령은 모든 사용자가 서비스를 제어 할 수 있습니다 (하지만 관리자 및 로컬 시스템을 서비스를 삭제하거나 서비스의 보안을 변경할 수 있습니다) :

sd sdset <myservice> "D:(A;;CCLCSWRPWPDTLOCRSDRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)"

당신은 보안 설명을 약간 조정할 수도 있습니다 특정 계정 만 서비스를 제어하는 ​​것을 허용하려는 경우 원격 계정이 시스템에 의해 인증되는 한 원격으로도 작동합니다.

+0

이 방법이 적합하지만 SetACL을 사용하여 서비스에 대한 사용 권한을 설정하는 것이 더 쉽습니다. 예를 들면 다음과 같습니다. http://helgeklein.com/setacl/examples/managing-printer-service-and-share-permissions-with-setacl-exe/ –

+0

감사합니다. – CodeRedick

0

서비스를 재시작하는 것은 어떻습니까? 메서드 Restart(string userId, string password) 또는 유사한 것을 노출 할 수 있습니다.

인증 된 사용자가 호출 할 때 answer에 설명 된 접근 방법을 사용할 수 있습니다. 즉 :

  1. 실패 Environment.Exit(1)
  2. OS가 당신을 위해 서비스를 다시 시작
  3. 전화에 다시 시작하도록 서비스를 설정합니다.

다시 시작하지 않으려면 Environment.Exit(0)으로 전화하십시오.