2011-09-30 5 views
3

가끔 명령 줄에서 사용되는 winforms 응용 프로그램이 있습니다. 즉 콘솔 응용 프로그램 인 경우 출력이 될 수cmd에서 실행할 때 콘솔과 winforms 응용 프로그램의 차이점

[STAThread] 
static void Main() 
{ 
    AttachConsole(ATTACH_PARENT_PROCESS); 
    Console.WriteLine("Hello"); 

    /*Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1());*/ 
} 

:

C:\ConsoleApplication\ConsoleApplication.exe 
Hello 
C:\ConsoleApplication\_ 

그것 실제로 Windows 응용 프로그램의 경우 :

C:\WindowsApplication\WindowsApplication.exe 
C:\WindowsApplication\Hello 
_ 
여기 는 (물론 간체) 코드입니다

누구나 왜 그런 차이점이 있으며 내 Windows 응용 프로그램을 콘솔에서 cmd를 실행할 때 작동하도록 만들 수 있는지 말해 줄 수 있습니까?

편집 :

에 cmd에서 실행할 때 콘솔처럼 행동하는 내 Windows 응용 프로그램을 원하는 :

C:\WindowsApplication\WindowsApplication.exe 
Hello 
C:\WindowsApplication\_ 

솔루션 :

결과

내 응용 프로그램을 실행하는거야 예 :

C:\WindowsApplication\start /wait WindowsApplication.exe 
+2

정확히 달성하기 위해 무엇을하려합니까? –

답변

8

예. 차이점은 cmd.exe가 실행 파일의 종류를 알고 있다는 것입니다. 콘솔 모드 응용 프로그램 일 때 프로세스가 종료 될 때까지 대기합니다. 아니요 일반 Windows GUI 응용 프로그램 인 경우이 대기합니다. 자신의 창을 만들 것이라고 신뢰하므로 명령 프롬프트가 다시 표시되고 출력이 추가됩니다. 그에게. 당신은 또한 BTW Console.ReadLine()을 사용하여 문제가있을 수 있습니다.

AllocConsole()를 호출하면 대신 유일한 보편적 수정입니다 당신은 기다려야 cmd.exe를 강제로 start /wait yourapp.exe하여 프로그램을 시작해야 할 것

는.. 또한 creati을 담당 앱이 바로 가기에서 시작될 때 콘솔을 사용합니다.

AllocConsole()은 매우 혼란 스럽습니다. 메인 프로그램을 시작하기 위해 Process.Start + WaitForExit 만 수행하는 작은 콘솔 모드 응용 프로그램 작성을 고려하십시오. 아마도 명령 줄 인수를 무시할 수도 있습니다. 이제 막는 행동을 되 찾을 수 있습니다. 실행 파일의 이름을 mainapp.com으로 변경하면 (mainapp.exe를 시작하기 위해) VS가 사용하는 트릭 인 devenv.exe와 devenv.com의 차이가 아주 잘 감춰집니다.

0

올바르게 이해하면 Windows 응용 프로그램이 실행되는 동안 Console 스레드를 차단하고 싶습니다. 왜 그렇게 할 지 모르겠지만 작동하는 방법을 알려주세요.

WinForms 응용 프로그램을 콘솔 응용 프로그램으로 변경하면 양식이 열립니다. 이렇게하면 창을 표시하는 동안 콘솔 스레드가 차단됩니다.

+0

나는 이미 cmd (배치 파일에서 호출 할 수 있고 자동 모드에서 작동 할 수 있음)에서 사용할 수있는 응용 프로그램이 있기 때문에이 작업을 수행하고 있습니다. 그러나 나는 또한 도움말 명령을 지원해야하고, 끝에 빈 줄이있을 때 좋지 않다. – username

4

콘솔 응용 프로그램 또는 gui (귀하의 경우에는 winform) 응용 프로그램인지 여부를 나타내는 플래그가 exe에 있습니다. 앱을 시작하면 콘솔 앱인 경우 Windows가 프로그램에서 콘솔을 분리합니다. 당신은 당신이 원하는 것을 달성하기 위해 다음과 같은 방법을 사용할 수 있습니다

  1. 는 GUI와 같이 응용 프로그램을 컴파일, 이름은
  2. 는 = A DOSKEY 별칭 mytool 만들기/대기 C를 시작 mytool.exe : \ 경로 \ mytool.exe $ *

이렇게하면 탐색기 나 바로 가기에서 mytool.exe를 시작할 때 일반 Windows 응용 프로그램을 시작할 수 있습니다. 콘솔에 mytool을 입력하면 "start/wait"명령으로 콘솔을 시작합니다.이 플래그는 콘솔을 분리하지 않습니다. (콘솔에서 뭔가를 출력/입력하려면 콘솔에서 부모 콘솔에 연결해야합니다.)

+0

고마워, 나는 몇 가지 대답을 받아 들일 수 있었으면 좋겠다. – username

관련 문제