2012-04-17 3 views
2

그래서 C#을 사용하여 Windows 서비스를 만들고 Visual Studio에 설치 프로그램을 만들었습니다. 항상 실행되도록 설정하지 않으므로 수동으로 실행되도록 설정되어 있습니다. 그런 다음 서비스를 켜고 끄는 옵션이 있어야하는 다른 응용 프로그램 (C# WPF)이 있습니다 (서비스 자체는 차례대로 내 WPF 응용 프로그램과 통신하는 웹 서비스를 만듭니다). 이것은 Windows XP에서는 잘 작동하지만 Windows 7 컴퓨터에서 테스트하면 시작되지 않습니다. 놀랍게도 그것은 예외를 던지며 충돌을 일으킨다. 단지 아무것도하지 않는다. 이 권한 문제가 있다고 생각합니다. 동일한 Windows 7 계정을 사용하여 서비스 제어판으로 이동하면 서비스를 시작하거나 중지 할 수 없습니다.Windows 서비스에 대한 사용 권한을 설정하는 방법

내 질문은 정규 사용자 계정을 시작하고 중지 할 수 있도록 내 서비스를 설정하는 방법이 있습니까? 그리고 설치 프로그램이이를 자동으로 수행하도록 설정하는 방법이 있습니다.

WPF 응용 프로그램이 관리자 권한으로 실행되는 것을 원하지 않습니다!

+2

http://serverfault.com/questions/187302/how-do-i-grant-start-stop-restart-permissions-on-a-service-to-an-arbitrary-user –

+1

시각. 그러나 서비스에 자체 실행 플래그를 지정하면 일부 IPC를 통해 제어 할 수 있습니다 (예 : 명명 된 파이프, 소켓, WCF. Running은 false 일 때 유휴 상태가됩니다. –

+0

서비스처럼 보이지 않는 경우 서비스가 아닐 수도 있습니다. 즉 대안을 고려해야합니다. – NSGaga

답변

2

일반 사용자가 서비스를 시작하고 중지 할 수 있도록 서비스를 보호 할 수 있다고 생각하지만 그렇게하지 않는 것이 좋습니다. 이로 인해 많은 합병증이 생기고 혼란의 원인이 될 수 있습니다. 나는 항상 물건을 간단하게 유지하는 것을 선호한다. 특히 설치와 보안에 관해서는 특히 그렇다.

그래서 사용자가 서비스를 시작하고 중지 할 수 없으면 서비스가 항상 실행되도록해야합니다. 서비스가 항상 활성화되기를 원하지 않으므로 서비스에 자체 Running 플래그를 부여하는 것이 좋습니다. 이것이 true로 설정되면 서비스가 활성화되어 바쁜 일을합니다. 그렇지 않으면 서비스가 유휴 상태로 유지됩니다. 원하는 IPC 메커니즘 (소켓, 명명 된 파이프, WCF 등)을 사용할 수 있습니다.)를 사용하여이 스위치를 토글 할 수 있습니다.

1

Windows 8에는 기본적으로 어떤 종류의 트리거에 대한 응답으로 요청에 따라 서비스를 시작할 수있는 기능이 있습니다. 그러나 Windows 7의 경우 유일한 옵션은 시작할 때 자동으로 시작되도록 설정하는 것입니다. 당신은 그것이 창을 시작하는 시간을 추가하지 않도록 지연 시작할 수 있도록 설정할 수 있습니다.

일반 사용자는 서비스를 시작하고 중지 할 수 없습니다.

편집 : 사용자가 서비스를 시작하고 중지 할 수있는 담요 기능이므로 위의 댓글에서 링크를 읽으면 나에게 들립니다. 여기에있는 질문은 특정 서비스에 대해이 작업을 수행하는 방법에 관한 것입니다.

서비스를 특정 사용자로 실행하도록 설정할 수도 있지만 실제로는 특정 사용자 만 작동하며 워크 스테이션의 다른 사용자는 응용 프로그램을 사용할 수 없습니다. 사용자가 실행중인 서비스가 사용자가 제어 할 수 있음을 암시한다고 가정 할 때 서비스를 시작하거나 중지 할 수 없습니다.

또한 의견 및 기타 답변을 읽는 중에 응용 프로그램을 실행할 수있는 모든 사용자가 서비스를 사용할 수 있는지 궁금해합니다. 즉, 사용자 A가 워크 스테이션에 로그온하여이 응용 프로그램 (및 서비스)을 시작하고 잠그고 걸어 나갈 때 B 로그온을 사용하면 동일한 서비스가 실행됩니까? 서비스가 동시에 여러 사용자를 지원할 수 있습니까? 아니면 여러 번 실행되는 응용 프로그램에서 서비스를 사용하면 재미있는 일이 발생하기 시작합니다.

이것은 실제로 응용 프로그램이 시작될 때 배경이 시작되도록하는 것처럼 들립니다. 이 스레드 (또는 스레드)는 서비스 작업을 수행하며 응용 프로그램이 종료되면 본질적으로 종료됩니다. 물론이 질문에 대한 자세한 내용은 더 나은 대답을 줄 수 있습니다.

물론 서비스로서 적절하다면, 잠들지 않는 작업자 스레드와 서비스를하지 않을 이유가없고,해야 할 일이 있는지 확인하는 제작자 역할을하는 또 다른 타이머 스레드가 있습니다.

+0

Grrr! 우리는 지금 막 Windows 7로 업그레이드 할 예정입니다 (언제든지 작년에 대한 메시지였습니다). Windows 8을보기까지 몇 년이 걸릴 것입니다! –

+0

@MattBurland 미안하지만 그건 현실입니다. 이 질문에 대한 대답이 있습니까? 그렇다면 그것을 받아 들일 수 있습니까? – Andy

+0

질문에 대한 첫 번째 의견은이 대답이 잘못되었음을 암시합니다. 다음 중 충돌하는 견해 중 올바른 것은 무엇입니까? –

관련 문제