2012-10-11 4 views
1

먼저 비주얼 스튜디오를 사용하지 않고 메모장과 csc를 사용하고 있습니다. 내가 뭘 하려는지 exe의 비주얼 스튜디오의 Windows 응용 프로그램처럼, 즉, 모든 콘솔 창을 열지 않을 때 EXE를 두 번 클릭하면 만들 수 있습니다. 작업exe, 콘솔없이 Visual Studio

[DllImport("kernel32"] 
public static extern IntPtr GetConsoleWindow(); 

IntPtr window = GetConsoleWindow(); 
if(window != IntPtr.Zero) ShowWindow(window, 0); 

와 유사한 조각을하지만, 콘솔은 여전히 ​​분할 초 동안 나타납니다 :이를 발견했다. 나는 그것이 전혀 나타나지 않기를 바란다.

또한 Process 클래스를 사용하면 exe가 독립 실행 형이므로 직접 손으로 두 번 클릭해야하므로 이미 실행중인 프로그램에서 실행되지 않습니다.

저는 VB 스크립트를 사용하여 exe 및 다른 해결 방법을 실행하는 박쥐를 시작하지만 내 필요에 맞지 않습니다.

exe를 콘솔 창없이 열도록 컴파일하는 방법은 무엇입니까? Visual Studio의 Windows 응용 프로그램이 가능하기 때문에 가능해야합니다. 내가 폼을 원한다는 것을 명확히하기 위해서, 나는 백그라운드에서 프로그램을 실행하기를 원한다. 콘솔을 보여주지 않기 때문에 비교를 위해서만 윈도우 애플리케이션을 언급하고있다.

"비주얼 스튜디오 사용"과 같은 어리석은 답변을주지 말거나 대답 대신 질문으로 응답하십시오. 도와 줘서 고마워!

답변

0

관리되지 않는 라이브러리 kernel32.dll과 FreeConsole 함수를 사용할 수 있습니다. 다음은 예입니다.

[DllImport("kernel32.dll")] 
static extern bool FreeConsole(); 

static void Main(string[] args) 
{ 
    FreeConsole(); 
    // Do other stuff 
} 

내가 원하는 것을 알려주세요.

+0

안녕하세요, 내가 게시 한 스 니펫과 기능면에서 동일합니다. 즉, 시도했지만 콘솔 창이 닫히기 전에 잠시 동안 나타납니다. 이 코드 줄 (FreeConsole)이 충돌하기 전에 콘솔에서 exe 자체가로드되고 실행되기 때문에이 문제가 발생할 수 있습니다. 따라서 Visual Studio에서 Windows 응용 프로그램 용으로 사용하는 방식과 달리 exe를 다르게 컴파일해야한다고 생각했습니다. 내가 어떻게 할 수 있는지 다른 제안있어? – CSharper

0

한 가지 방법으로 만 이동할 수 있습니다.

  1. GUI 하위 시스템 인 CONSOLE 하위 시스템으로 자신의 응용 프로그램을 만듭니다.
  2. 컴파일러를 실행할 때 CreateProcess 또는 ShellExecute (C++)를 SW_HIDE (CmdShow)와 함께 사용하십시오. 기억할 수 없다, C# 함수에 상응하는 인수가 있다고 생각했다. 그렇지 않다면 WinAPI를 사용하여 컴파일러를 시작하십시오.

이 방법은 콘솔 창을 완전히 모호하게합니다.

관련 문제