문제

내가 쓴 작은 서비스(일반 Win32)및 알고 싶다면 그것은 실행 가능한 다수의 인스턴스 때 그것을 여러 사용자가 기록됩니다.

기본적으로 말하자리 UserA 및 사용자를 위한 UserA 의 서비스로 로그온"도메인\UserA"그리고 사용자는 서비스로 로그온"도메인\사용자"-이에서 동일한 실행 물론입니다.을 변경할 수 있습 로그를 사용하여 동적으로 ChangeServiceConfig()함수,그러나 그것을 변경 시스템-넓은 it 보는 동안 나는 같은 각 사용자가 자신의 서비스 복사본만 실행하셨습니다.

사전에 감사를 위해 어떤 포인터입니다.

도움이 되었습니까?

해결책

Win32 서비스하도록 설계되었 시스템-넓은,실행 시작하기 전에 사용자에 기록됩니다.당신이 원하는 무언가에서 실행하는 사용자별로,그것은 아마도 더 나은 그것을 디자인하는 일반 응용 프로그램으로 실행하는 사용자의 시작 그룹입니다.

다른 팁

그것은 아마도 서비스를 만들 자식 프로세스는 다음을 채택하의 자격 사용자(또는 그들과 함께 시작했)?이 방법 당신은 여전히 하나로 인스턴스의 서비스,그러나 그것을 할 수 있당 사용자 작업에 모두 동일합니다.IIRC Windows 작업 스케줄러는 서비스이 작업을 수행합니다.

전체 개념의 서비스는 그것이 시작되기 전에 어떤 사용자는 것도 기록됩니다.그래서 이 경우에 가능했다,당신은 할 수 없을 것을 선택 a 및 사용자 b 의 경우 서비스가 시작하기 때문에 아무도 그들 중에 로그온한 아직입니다.


가능한 방향으로는 것에 대한 서비스를 시스템으로 실행하고 몇 분마다 확인하는 경우에는 사용자가 로그에있는 경우-가장하는 사용자지 및 무료 세면용품 등이 있습니다.

네,그 소리를 가까(내가 응답 의견에서 그렉,그러나 의견을 너무 짧을 맞 나의 답변).

몰 목록의 사용자가 사전에,하지만 GUI 제어 응용 프로그램을 사용되는 것이를 입력해 사용자 이름/비밀번호를 사용자.그래서,사용자 a 는 것이 로그에,응용 프로그램을 실행하고,자격 증명을 입력하고 서비스를 사용합니다.동일한 시간에(후 userA 가 로그오프하지만,서비스가 아직도 실행 userA 의 자격 증명)사용자를 로그에,응용 프로그램을 사용하며,다른 복사하는 서비스의 실행을 시작으로 로그온한 사용자.따라서,같은 시간에 a 및 사용자 b 의 서비스를 실행하고 있습니다.

하는 것이 가능할까요?

당신은 아마를 찾고 가장합니다.일부를 확인 참조를 발견으로 빠른 Google 검색하기:

그것은 소리로는 경우에 당신은 실제로 두 개의 서로 다른 충돌하는 요구 사항으로,타이밍 및 정체성입니다.

  1. 실행으로 각 사용자 로그인
  2. 자동으로 실행되지 않는 경우에도 사용자로 로그인합니다.

방법이 없이 소소는 대신에,고려한 포장 프로그램에 서비스프로그램이 정상적으로 실행 시작 시 각 사용자의 사용(중 하나를 통해 시작 폴더 또는 알아보도록 하자),그리고 또한 성 서비스로 응용 프로그램을 실행하는 시스템으로 사용자(또는 어떤 다른 사용자 정의).
때문에 당신은 또한 필요(당신이 이 말씀에서 설명)상태로 유지하기 위해 응용 프로그램으로 실행되는 최종 사용자가 로그아웃할 수 있습 서비스 관리 이 프로세스에 대한 당신.

그러나 이지 않을 수도 좋은 생각이 되기 때문에,사용자가 여전히 효과적으로 기록됩니다.이 수많은 부작용을 포함하여,보안,성능(너무 많이 사용하여 로그인한 사용자는 한 번에...),등등.

를 만들 수 있는 서비스 응용 프로그램과 서비스(normal)응용 프로그램들을 통해 통신 IPC(매핑된 파일,파이프,MailSolts...당신은 그것을 이름).

이 방법을 해결하는 모든 문제입니다.

참고:동일한 응용 프로그램을 다르게 동작할 수 있습니다-면 프로세스로 시작과 시작할 때 사용자에 의해,그러나 결국은 같은 일을,당신은 여전히 2 응용 프로그램(는 경우에 상관없이 당신이 하나만 실행).

실행하는 다른 계정이 가능합니다.사실,이 일반적입니다.보 svchost.exe 를 구현하는 무리의 OS 서비스입니다.

지 않아요 어떻게 당신이 결정하는 계정이다.큰 회사에서 많은 Pc 를 설정하도록 모든 100.000+명의 직원이 사용할 수 있습니다.지 않을 실행하려는 귀하의 서비스로 로그인한 사용자도 수 있습니다 당신은 그것을 실행하려는 모든 100.000 사용자.그래서 어떤 계정을 물어?

Windows 과정 실행할 수 있습의 권한으로 하나의 사용자니다.이 서비스에 적용되며 다른 프로세스입니다.충분한 권한이 가능하다"스위치"다른 사용자 사이를 사용하여 가장입니다.가장 일반적인 패턴을 위해 당신이 무엇을 하려고 하는 것입 인스턴스를 하나의 권한 있는 서비스를 등록하여 로그인/로그 이벤트를 만들 어린이 프로세스에 따라,그들의 각 하나로 가장하는 로그인한 사용자.패턴 또한 단순화 UI 로 각 프로세스를 실행에 각각 별도의 사용자의 데스크톱의 경우 그것은 일반 응용 프로그램입니다.

을 유지하는 경우 권한 있는 서비스의 코드를 가능한 한 간단하게 이 패턴은 혜택을 추가 당신이 최소화하는 공격 표면의 코드입니다.는 경우에는 사용자를 발견한 보안 문제에서"사용자로 실행의 측면"당신의 서비스는 그것이 문제가 아닌,보안 문제를 권한 있는 서비스 이어질 수 있는 권한을 상승.사실,Vista 이전에 권한 있는 서비스를 구현하 Windows 메시지를 처리하는 루프에 취약한 유형의 공격이라고 산산조각 공격, 는 당신이 알고 있어야 하는 주어진 당신이 무엇을하려고 노력하고 있습니다.

당신이 원하는 모든 시간을 실행,그래서 당신이 원하는 서비스입니다.

당신이 원하는 무언가를 추적하는 각 사용자,그래서 당신이 원하는 응용 프로그램에서 실행하는 사용자 세션과 통신하는 서비스(명명된 파이프를 사용하거나 DCOM 또는 어떤 사용자의 요구 사항에 맞는).

당신이 필요가 없는 다수의 인스턴스 서비스입니다.의 설명에서 당신의 문제처럼 무엇을 해야 중 하나입할 수 있는 서비스를 가장 사용자와 작업을 실행에 자신을 대신하여.

당신이 할 수 있는 이것을 구현함으로써 COM 객체에서 호스팅 서비스입니다.클라이언트 응용 프로그램(는 최종 사용자 실행)호출 CoCreateInstanceEx 에 CLSID.는 원인이 될 수의 새 인스턴스 COM 체를 만들어서 서비스입니다.다음 응용 프로그램에서 사용할 수 있는 방법에 하나의 인터페이스를 통합 수집에 사용자명 COM 체(그러나 나는 주의할 수집하는 자격 증명하고 대신에 보면 전달할 수 있는 사용자 토큰을 대신에).COM 체는 실행하의 컨텍스트에서 서비스 호출할 수 있습 LogonUser()을 로그에는 사용자와 가장은,그것이 무엇이든 할 수 있는 그녀를 대신하여(다음과 같이 찾는 사용자가 지역 appdata 폴더:-)).다른 답변 havve 좋은 연결을 가장하는 사용자가 사용하는 자격 증명 또는 토큰을 발급합니다.

는 경우에 당신은 편안한 느낌 COM,나는 당신을 제안을 만들의체로 다중 스레드(에서 생활 MTA),그들의 실행하지 않은 직렬화 COM.지 않은 경우,기본 하나의 스레드 모델을 충분히 좋은 것은 당신을 위해.

Visual Studio ATL 마법사를 생성할 수 있습의 해골 COM 체에 살고있는 서비스입니다.읽을 수도 있습을 구현하는 방법에 대한 윈도우 서비스 ATL 여기: http://msdn.microsoft.com/en-us/library/74y2334x(VS.80).aspx

알지 못하는 경우 COM 에서 모두 사용할 수 있습니다 다른 커뮤니케이션 채널을 통과하는 자격 증명하는 서비스에 있습니다.

어떤 경우에,당신의 서비스가 자격 증명이 모든 작업에 사용자를 대신하여야 할 것이 실행되는 백그라운드 스레드에서,하지 않도록 차단 응용 프로그램으로 실행하는 사용자.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top