2010-02-27 5 views
18

저는 10 분마다 실행 파일 (C#)을 실행하여 한 디렉터리에서 다른 디렉터리로 일부 이미지를 처리하는 서버에 Windows 서비스 (C#)를 설치했습니다. 어떤 사용자와도 상호 작용이 필요하지 않습니다. 그럼에도 불구하고 출력 창으로 실행 파일을 실행 한 후 "서비스가 데스크톱과 상호 작용하도록 허용"확인란 insecure and bad practice으로 간주해야합니다. 이 문제에 대해 어떻게 생각합니까? 나는 그것이 디버깅 쉽게 만들고 전체 Windows 서비스 재배포을 필요로하지 않습니다"서비스가 데스크톱과 상호 작용하도록 허용"대신 사용할 수 있습니까?

  • 때문에 실행 내 Windows 서비스에서 분리가 좋아합니다.
  • 때때로 나는 다른 간격으로 여러 실행 파일을 실행하려면 같은 창을 서비스를 사용 (하지만 모두 같은 프로젝트와 관련된).

편집 : 바탕 화면과의 상호 작용이 활성화되지 않은 경우

, 콘솔 응용 프로그램이 제대로 실행되지 않고 다음과 같은 오류가 Windows 로그 안에 표시 :

Faulting application myapp.exe, version 1.0.0.0, time stamp 0x4b8304c3, 
faulting module KERNEL32.dll, version 6.0.6002.18005, time stamp 0x49e03821, 
exception code 0xc0000142, fault offset 0x00009eed, process id 0x10ec, 
application start time 0x01cab736950a64b5. 

번 데스크톱 상호 작용이 활성화되고 응용 프로그램이 정상적으로 실행됩니다.

의견이 있으십니까?

시간 내 주셔서 감사합니다.

+0

Vista 및 이후 버전 용인가요? –

+0

디버깅 부분이 좋은 이유는 아닙니다. 당신은 실행 파일을 가질 수 있었고 서비스는 모두 모든 기능을 포함하는 공통 어셈블리를 사용했습니다. –

+0

예, Windows 서비스에서 Windows Server 2008 Web Edition을 실행 중입니다. Windows 서비스 및 실행 파일은 .NET Framework 3.5 – jdecuyper

답변

10

나중에 비스타를 사용하고 당신이 정말로하지 않는 사용자와의 상호 작용이 필요하지만 실행하기 위해 대화 형 EXE가있는 경우 Session 0 isolation feature은 '나쁜에 대한 우려의 일부를 완화하는 데 도움이됩니다 (세션 0에는 물리적 인 콘솔이 없음) 데스크탑과 상호 작용하는 서비스를 가졌습니다.

이 세션 0 격리는 권한이없는 사용자가 다른 세션에서 대화 형 데스크톱을 사용할 때 서비스에서 Shatter Attacks을 수행하지 못하게합니다. Shatter 공격은이 '데스크톱과의 상호 작용'이 나쁜 관행으로 간주되는 주된 이유이며, Vista 이상을 사용하는 경우 피할 수 없으면 (또는 너무 많은 노력을 기울여야 할 것입니다.) 괜찮을 것입니다.

일이 잘 진행되고 있다면 괜찮을 것입니다.

물론 OS 업데이트 후에는 작업이 중단 될 수 있으므로 실제로 필요하지 않으므로 상호 작용에 대한 종속성을 이전하기 위해 준비하는 것이 좋습니다.

+0

세션 0 격리는 많은 의미를 가지며 어떻게 든 내 서비스의 보안 함축에 대해 조금 덜 걱정하게 만듭니다. 그러나 정확하게 언급했듯이 대화 형 기능을 생략하는 것이 좋습니다. 프로세스를 만들 때 'UseShellExecute'속성을 true로 설정하고 'CreateNoWindow'를 false로 설정하려고 시도했지만 서비스에 여전히 데스크톱 상호 작용이 필요합니다. – jdecuyper

+0

그 말이 맞습니까? CreateNoWindow는 * true *이어야하며 UseShellExecute는 아마 false 여야한다고 생각합니다 (UseShellExecute는 중요하지 않을 수도 있음). – Weeble

+0

그 오타를 유감스럽게 생각합니다! 실제로 CreateNoWindow는 true로 설정됩니다. – jdecuyper

2

가능한 경우 출력 창을 사용하지 않도록 이동을 처리하는 실행 파일을 다시 작성하는 것이 좋습니다. 표준 출력 인 경우 출력없이 콘솔 응용 프로그램을 실행하면 "서비스가 데스크톱과 상호 작용하도록 허용"하지 않고도 서비스 내에서 실행할 수 있습니다. 이는 서비스 변경없이 모든 혜택을 제공합니다.

+0

응용 프로그램의 출력을 제거하는 방법은 무엇입니까? Weeble과 같은 솔루션에 대해 생각하는 곳은 어디입니까? 감사. – jdecuyper

+0

네, 그건 기본적으로 제 생각이었습니다. 콘솔 응용 프로그램 일 경우 데스크톱 상호 작용이 필요하지 않습니다. 그러나 Windows 응용 프로그램을 사용하는 경우에는 작동하지 않습니다. –

2

서브 프로세스는 콘솔 응용 프로그램입니까? 필자는 Windows 서비스를 작성하지 않았지만 아마도 창없이 하위 프로세스를 시작하는 것만으로 충분하다고 생각합니다. ProcessStartInfo를 사용하고 ProcessStartInfo.CreateNoWindow를 true로 설정하는 Process.Start의 오버로드를 사용합니다.

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

+0

링크에 대해 감사드립니다. 이미 시도했지만 확인란을 활성화해야합니다. – jdecuyper

+0

슬프게도 현재 Windows 컴퓨터에 액세스 할 수 없습니다. 하위 프로세스가 시작된 다음 실패했는지 또는 전혀 시작하지 않았는지 알고 있습니까? 그리고 그것은 콘솔 어플리케이션입니까, 아니면 다른 것입니까? – Weeble

+0

C# 콘솔 응용 프로그램입니다. 내 질문을 편집하고 기록 된 오류 메시지를 추가했습니다. – jdecuyper

4

나는 이것이 조금 늦다는 것을 알고있다.하지만이 상황에서는 태스크 스케줄러를 사용하고 Windows 서비스에 신경 쓰지 않을 것이다. 작업 스케줄러에는 포괄적 인 스케줄링 옵션 세트가 있으며 문제없이 콘솔 어플리케이션을 실행할 수 있습니다.

관련 문제