2013-08-23 3 views
0

파일 시스템을 시작할 때 파일 시스템을 모니터링하는 Windows 서비스가 있습니다. 이제 백그라운드에서 실행해야하는 비슷한 콘솔 응용 프로그램이 필요합니다. 콘솔 응용 프로그램에 코드를 포팅했지만 외부 프로그램에서이 응용 프로그램을 수동으로 제어해야합니다.콘솔 응용 프로그램을 종료 할 때까지 백그라운드에서 실행하십시오.

MyExternalProgram 
{ 
    Start(Myconsole) 
    // Do some operations. 
    Exit(MyConsole) 
} 

과 유사합니다. 어떤 입력?

+0

이 Windows 서비스는 [FileSystemWatcher] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)를 사용하여 수행 할 수없는 작업을 수행합니까? 그렇지 않으면'FileSystemWatcher'를 사용하여 다시 구현하고 다른 응용 프로그램을 생성하지 않아도됩니다. – Adrian

+0

Adrain, 내 콘솔 응용 프로그램에서 FileSystemWatcher를 다시 구현했습니다. 하지만 수동으로 종료 할 때까지이 콘솔 응용 프로그램을 유지하는 방법이 있습니다. OnChanged 및 OnRenamed와 같은 내 이벤트는 콘솔 앱에 있기 때문에 그래서 응용 프로그램은 내가 끝낼 때까지 살아 있어야합니다. – Rupesh

답변

1

은 simpliest 방법은 Process.CloseMainWindow

가 메인 창에 가까운 메시지를 전송하여 사용자 인터페이스가있는 프로세스를 닫 사용하는 것입니다.

그래서 Process와 콘솔 응용 프로그램을 호출하고 나중에 그것을 닫습니다

Dim p = new Process() 
p.StartInfo.FileName = "c:\your\path\to\application.exe" 
p.Start() 
' p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden ' hide window 
' 
' do your stuff 
' 
p.CloseMainWindow() 
' p.Kill() ' If window is hidden, you have to use Kill() 

을 당신은이 응용 프로그램의 창을 보여 p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden을 사용하지 않으려면,하지만 당신은 그것을 중지해야 Process.Kill으로 처리를 즉시 중단합니다.

또 다른 방법은 IPC 일종의 콘솔 응용 프로그램에 종료 신호를 보내는 것입니다,하지만 이것은 귀하의 경우에 잔인한 것이라고 가정합니다.

0

VB에서 SHELL 기능으로 앱을 실행할 수 있습니다. 매개 변수를 사용하여 최소화되도록 설정할 수 있습니다.

Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus 

그러나 이는 앱의 인스턴스를 시작하기 만하면됩니다. 다른 프로그램이 자체 또는 명령 줄의 셸에서 응용 프로그램에 인수를 보낸 경우 대부분의 경우 별도의 인스턴스 (및 PID)가됩니다. 그냥 콘솔 응용 프로그램을 닫는 좋은 경우

관련 문제