2009-10-02 5 views
1

우리는 주기적으로 실행되는 사용자 인터페이스가없는 무인 애플리케이션을 보유하고 있습니다.무인 애플리케이션 모범 사례 질문

VB.NET 앱입니다. 서비스 나 폼없는 Windows 응용 프로그램으로 개발되는 대신 폼을 사용하여 개발되었으며 모든 코드는 form_load 논리에 배치되고 프로그램의 마지막 줄로 "END"문이 사용되었습니다.

불필요한 Windows 양식 리소스를 사용하는 프로그램을 만드는 것 외에 BAS 파일의 MAIN 하위에 시작 로직을 적용하기 위해 재 작업을 위해이 코드를 다시 보내야하는 강력한 이유가 있습니까?

프로그램을 계속해서 실행하는 것과 달리 혼합 모드로 들어가고 나가려면 프로그램을 만들 때 어떤 점이 있습니까?

응용 프로그램이 Form으로 개발 된 경우 응용 프로그램에 MessageBox 명령이 없더라도 아무도 응답하지 않는 대화 상자가 표시된다는 것에 대해 걱정해야합니까?

이전에 대화 상자를 피하기 위해 앱이 무인으로 실행되고 있는지 확인할 수있는 VB6이있었습니다.

답변

4

이것이 실행되지 않는 조건이 있는지 여부를 알 수 없습니다.

그러나 앞으로 진행할 작업을 수행 할 사람이 코드를 제공 한 경우이 코드를 모범 사례를 이해하는 데 도움이되고 (가장 좋은 방법을 이해하는 데 도움이되는) - 전달할 실제 코드.

1

서비스가 아니길 원한다면 아무 것도 Windows 서비스 여야한다고 말하면 안됩니다. 작업 스케줄러 또는 비슷한 것을 통해 실행되도록 예약하는 것은 유효한 옵션입니다.

그러나 개발자가이 응용 프로그램을 만드는 데 "Windows Forms"프로젝트 대신 "Console App"프로젝트를 선택해야하는 것처럼 들립니다.

2

우선 양식에서 실행하지 않아도됩니다. 양식이 프레젠테이션을 위해 존재하므로 양식을 프레젠테이션에 사용해서는 안됩니다.

응용 프로그램을 서비스로 변환하는 것을 망설이지 않으려면 콘솔 응용 프로그램을 만든 다음 Windows 작업 스케줄러를 사용하여 일정을 잡으십시오.

이렇게하면 필요한 기능을 수행하는 주 기능이있는 콘솔 응용 프로그램을 만들 수 있습니다.

어쨌든 프로그래머는 창을 표시 할 수 있으므로 메시지 상자가 없어야합니다. 모든 통신은 로컬 파일, Windows 이벤트, 데이터베이스 로깅을 통해 수행되어야합니다.

자세한 내용은 저에게 물어보십시오.

+0

콘솔 앱으로 변경하시는 이유는 무엇입니까? 오버 헤드가 적을뿐 아니라 대화 상자가 표시 될 가능성을 없애는 지요? WinForm 앱과 관련된 문제입니까? 그것을 콘솔 앱으로 변경하는 것은 내가 고려한 직감이었습니다 – ChadD

+0

우선, 애플리케이션은 더 간단하고 코드가 적습니다. "이벤트"가 없습니다. 구현해야 할 논리 이상은 아닙니다. 둘째, Forms.Windows와 같이 사용하지 않을 네임 스페이스의 모든 가져 오기도 제거해야합니다. 내가 응용 프로그램을 작성한다면 서비스로 사용하고 Quartz.NET (http://quartznet.sourceforge.net/)을 사용하여 내부적으로 프로세스를 예약 할 것입니다. Log4NET (http : //logging.apache.org/log4net/index.html) 물론이 모든 것은 요구 사항에 따라 다릅니다. 귀하의 신청서는 무엇입니까? 그것은 무엇을합니까? 데이터 베이스? –

0

다시 보내주십시오. 응용 프로그램은 문제가되지는 않지만 대량으로 필요 이상으로 느립니다. 리소스가 부족한 경우가 많습니다. 하지만 주된 이유는 콘솔 앱으로 변환하는 것이 매우 쉽습니다.

0

콘솔 창을 표시하지 않으려면 다음을 수행하십시오.

새 클래스 "Program.vb"를 만들고 공용 공유 Main() 메서드를 추가하고 양식의 "OnLoad"논리를이 메서드로 이동합니다.

다음으로 양식을 삭제하고 양식 대신 Program.Main을 사용하려면 프로젝트 시작 창 개체 (프로젝트 속성 창에서 사용 가능)를 변경하십시오.

Windows 양식 리소스를 사용하지 않아도 동일한 효과가 나타납니다. 그런 다음 System.Windows.Form 및 System.Drawing에 대한 참조를 제거 할 수 있습니다.