1

내 클라이언트 응용 프로그램을 지원하기 위해 백그라운드 응용 프로그램이 필요합니다.이 응용 프로그램은 주 클라이언트 응용 프로그램이 실행 중인지 여부에 관계없이 항상 클라이언트 컴퓨터에서 실행해야합니다.Invisible WinForm 응용 프로그램으로 Windows 서비스를 대체 할 때 제안이 필요합니다.

Windows 서비스가 가장 먼저 선택되었지만 Windows 서비스에서 직면 한 문제는 다음과 같습니다. Windows 클라이언트 서비스를 통한 Windows 서비스 제어 용이성, Windows 서비스 패치 설치 및 릴리스 및 Windows 서비스 실행 실패 문제 해결.

그래서 Windows 서비스에 대한 대안을 생각해 볼 때 Windows Forms 응용 프로그램이 보이지 않는 양식이 있다는 것을 알게되었습니다. 이 보이지 않는 앱은 시스템 시작으로 시작하여 항상 Windows 서비스가 수행하는 모든 작업을 수행하면서 계속 실행해야합니다. 그러나 개발에 깊이 들어가기 전에이 접근법의 장단점을 탐구하고 싶습니다.

이 접근에 대한 의견이나 제안이 있으십니까?

답변

1

요구 사항은 Windows 서비스에 더 적합합니다. Windows 서비스의 주된 이점은 시스템에 로그인 한 사람과 상관없이 시스템이 시작되는 즉시 시작된다는 것입니다.

배포 문제를 해결하려면 별도의 어셈블리에 비즈니스 논리를 작성하고 Windows 서비스와 함께 필요한 함수를 호출하십시오. 이렇게하면 수정 된 어셈블리 만 배포 할 수 있습니다.

보이지 않는 양식의 Winform 응용 프로그램은 목적을 수행하지 않습니다. HTH

+0

로그인 한 사용자의 App Data 폴더에있는 일부 파일과 상호 작용하려면 Windows 서비스가 필요합니다. 나는 창문 서비스가 이것을 할 수 있는지 궁금해. –

+0

@Arpit : 로그인 한 사용자 appdata 폴더에 액세스 할 수있는 것 같습니다. 자사의 작업에 대해 잘 모르겠습니다, 그것을보십시오 : http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ad116f07-9bc4-4ccd-be3a-679f95270ba3/ – JPReddy

+0

링크 된 스레드가 나타내는대로 , 서비스는 어떤 사용자에 대해서도 전혀 알지 못해서 로그인 할 수도 있고 그렇지 않을 수도 있습니다. 여기 내 대답은 피투성이의 세부 사항을 제공합니다. 사용자가 로그인하지 않아도 항상 * 실행되는 백그라운드 응용 프로그램이 기본 응용 프로그램을 지원해야하는 이유는 실제로 이해가되지 않습니다. 앱을 종료하려면 확실히 할 수 있어야합니다. –

1

그건 불가능합니다. 사용자 모드 응용 프로그램은 사용자가 시작해야하며 해당 사용자가 로그 오프 할 때 계속 실행되지 않습니다. 이는 SessionEnding 이벤트의 목적입니다. 사용자가 로그 오프하거나 컴퓨터를 종료 할 때 앱을 정상적으로 종료 할 수 있습니다. 시스템 시작시 무언가를 시작하여 항상 실행 상태로 유지할 수는 없습니다.

Windows 서비스가 필요합니다. 그러나 Windows Vista 이상에서는 서비스가 사용자와 직접 상호 작용할 수 없음을 알고 있어야합니다. 그들은 별도의 프로세스에서 실행되며 자신의 UI를 표시하는 것이 제한됩니다. 귀하의 요구 사항이 정확히 무엇인지는 분명하지 않지만 고려해야 할 가치가있는 Windows 서비스의 중요한 제한 사항입니다. 적절한 디자인은 실제로 이것을 요구해서는 안되지만,이 새롭고 안전한 행동이 실제로 놀랄만 한 사람들이 많이 있습니다. 이에 대해서는 this questionthis other question에 대한 자세한 내용을 통해 자세히 설명합니다.