2010-08-16 5 views
18

내 공공 도서관용 콘솔 응용 프로그램을 학교 프로젝트로 개발 중입니다. 콘솔 응용 프로그램은 사용자가 로그온하고 배경 작업을 수행하는 즉시 실행됩니다.내 콘솔 응용 프로그램을 보이지 않게하기

사실, 콘솔 응용 프로그램이 실제로 나타나길 원하지 않습니다. 나는 그것을 보이지 않게해야한다. 내가 필요로하는 마지막 사항은 불만입니다. 왜냐하면 어떤 사람들은 CMD 창이 열리고 닫혔다는 사실에 놀라움을 느끼기 때문입니다. 게다가 라이브러리는 그것을 가능한 한 보이지 않게하고 싶어합니다.

나는이 글의 코드를 다음 시도 : http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

하지만 아무 소용 , 나는 아직도 그 모든 작업을 완료 한 후 콘솔 응용 프로그램이 개폐 팝업 볼 수 있습니다.

콘솔이 나타나지 않게하는 더 좋은 방법이 있습니까? 감사.

+0

내 코드를 시도 해 봤나? 아직도 문제가 있습니까? – Searock

답변

36

할 일은 콘솔 응용 프로그램으로 컴파일하지 않는 것이 가장 좋습니다. Windows EXE로 컴파일하면 콘솔이 표시되지 않습니다. 그런 다음 UI를 표시하지 않고 Main 메서드에서 수행해야하는 작업을 수행 할 수 있습니다.

하지만 어떤 경우에 콘솔 창을 숨기거나 표시해야한다면이 작업에 FindWindow를 사용하는 것이 좋습니다.이 경우 더 신뢰할 수있는 API가 있으므로 GetConsoleWindow입니다. 이렇게하면 콘솔 창의 HWND가 표시되며 ShowWindow로 전달할 수 있습니다.

+1

그건 내 제안이기도합니다. +1. – David

+0

+! 직관적 인 Microsoft 스타일을 위해 ... – NinjaCat

+0

아, 알겠습니다. 그렇다면 Visual Studio의 "새 프로젝트"아래에있는 것은 무엇입니까? "빈 프로젝트"? 왜냐하면 저는 정상적인 .exe, 몇 가지 양식 및 콘솔 응용 프로그램에 대한 옵션을 볼 수 없기 때문입니다. – Kratz

8

시도해 보셨습니까 : 프로젝트 속성> 응용 프로그램> 출력 유형 : "Windows 응용 프로그램"?

+0

방금했는데 응용 프로그램이 고장났습니다. 임베디드 리소스에서 파일을 복사하고 디렉토리를 만들려고했는데 지금은 작동하지 않습니다. : – Kratz

2

콘솔 응용 프로그램보다 약간 복잡하지만 누군가가 로그인 할 때 백그라운드에서 실행되고 싶은 것이 있다면 Windows 서비스 응용 프로그램을 만들 수 있습니다.

그러나 Windows 서비스를 설정하고 설치에 약간의 추가 작업이 필요 않고 웹에있는 예제 코드의 풍부가 :

http://msdn.microsoft.com/en-us/library/9k985bc9(v=VS.80).aspx

http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=VS.80).aspx

http://www.c-sharpcorner.com/uploadfile/mahesh/window_service11262005045007am/window_service.aspx

http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

+1

하나의 캐비닛은 사용자가 로그인하기 전에 서비스가 시작되며 특정 사용자 계정에 묶여 있지 않습니다. 어떤 일을 하느냐에 따라 유용하거나 두통을 일으킬 수 있습니다. –

14

Josh EinsteinShowWindow Api를 사용하여 창을 숨길 수 있다고 제안했습니다.

using System.Runtime.InteropServices 

class CommandLine 
{ 

    [DllImport("user32.dll")] 
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

    [DllImport("Kernel32")] 
    private static extern IntPtr GetConsoleWindow(); 

    const int SW_HIDE=0; 
    const int SW_SHOW=5; 

    static void Main(string[] args) 
    { 
     IntPtr hwnd; 
     hwnd=GetConsoleWindow(); 
     ShowWindow(hwnd,SW_HIDE); 

     //Your logic goes here 
    } 
} 

내가 그것을 테스트하지 않았습니다으로이 코드에 대한 확실하지 않다 :

는 여기에 예입니다. 어떤 문제에 직면하면 알려주세요.

+1

다른 프로세스에서 프로세스를 시작할 때 콘솔 창을 짧게 깜박임. – Wouter

2

안녕하세요 저는 작업 스케줄러에서 호출 할 콘솔 응용 프로그램을 만들고있었습니다. 콘솔 응용 프로그램을 표시하지 않으려 고 Windows 응용 프로그램에 출력되도록 프로젝트 속성을 변경했습니다.

변경 Windows 응용 프로그램 로 이동 출력 유형 : 프로젝트 -> 프로젝트 속성 내가 Searock의와 두 가지 방법 다음 2) Searock 1) 조쉬 --- 시도

0

Windows 응용 프로그램에 출력 유형을 변경 솔루션은 매우 짧은 순간이지만 콘솔 앱 창이 여전히 나타났습니다. 그러나 Josh의 솔루션을 사용하여 콘솔이 나타나지 않았거나 프로그램에 문제가 없었습니다. 물론 모든 console.writeline 호출을 정보를 로그 파일에 기록한 호출

참고 : 저는 조쉬의 솔루션에 댓글을 달았을뿐입니다. 모자 아직 :)

관련 문제