문제

콘솔 애플리케이션을 실행할 때 콘솔 창을 숨길 수있는 방법이 있습니까?

현재 콘솔 프로세스를 시작하기 위해 Windows Forms 응용 프로그램을 사용하고 있지만 작업이 실행중인 동안 콘솔 창이 표시되기를 원하지 않습니다.

도움이 되었습니까?

해결책

당신이 사용하는 경우 ProcessStartInfo 클래스 창 스타일을 숨겨 지도록 설정할 수 있습니다.

System.Diagnostics.ProcessStartInfo start =
      new System.Diagnostics.ProcessStartInfo();
start.FileName = dir + @"\Myprocesstostart.exe";
start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

다른 팁

콘솔 애플리케이션을 작성하면 기본적으로 숨겨 질 수 있습니다.

새 콘솔 앱을 작성한 다음 "출력 유형"유형을 "Windows 응용 프로그램"으로 변경하십시오 (프로젝트 속성에서 완료)

프로세스 클래스를 사용하는 경우 쓸 수 있습니다.

yourprocess.StartInfo.UseShellExecute = false;
yourprocess.StartInfo.CreateNoWindow = true;

~ 전에 yourprocess.start(); 프로세스는 숨겨 질 것입니다

간단한 대답은 다음과 같습니다. 콘솔 앱의 속성 (프로젝트 속성)으로 이동하십시오. "응용 프로그램"탭에서 "출력 유형"을 "Windows Application"으로 변경하십시오. 그게 다야.

당신은 사용할 수 있습니다 프리 콘솔 프로세스에서 콘솔을 분리하려면 API :

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

(물론 이것은 콘솔 애플리케이션의 소스 코드에 액세스 할 수있는 경우에만 적용됩니다)

출력에 관심이 있으시면이 기능을 사용할 수 있습니다.

private static string ExecCommand(string filename, string arguments)
{
    Process process = new Process();
    ProcessStartInfo psi = new ProcessStartInfo(filename);
    psi.Arguments = arguments;
    psi.CreateNoWindow = true;
    psi.RedirectStandardOutput = true;
    psi.RedirectStandardError = true;
    psi.UseShellExecute = false;
    process.StartInfo = psi;

    StringBuilder output = new StringBuilder();
    process.OutputDataReceived += (sender, e) => { output.AppendLine(e.Data); };
    process.ErrorDataReceived += (sender, e) => { output.AppendLine(e.Data); };

    // run the process
    process.Start();

    // start reading output to events
    process.BeginOutputReadLine();
    process.BeginErrorReadLine();

    // wait for process to exit
    process.WaitForExit();

    if (process.ExitCode != 0)
        throw new Exception("Command " + psi.FileName + " returned exit code " + process.ExitCode);

    return output.ToString();
}

주어진 명령 줄 프로그램을 실행하고 완료되기를 기다리고 출력을 문자열로 반환합니다.

사용자 입력이 필요하지 않은 프로그램을 작성하는 경우 항상 서비스로 만들 수 있습니다. 서비스에는 어떤 종류의 UI도 표시되지 않습니다.

나는 당신이 원하는 것을 정확히 대답하지 않는다는 것을 알고 있지만, 당신이 올바른 질문을하는지 궁금합니다.

당신은 왜 다음 중 하나를 사용하지 않습니까?

  1. Windows 서비스
  2. 새 스레드를 만들고 프로세스를 실행하십시오.

원하는 것이 프로세스를 실행하는 것이 더 나은 옵션처럼 들립니다.

DLL 파일을 가져 오려면 클래스에 추가하십시오.

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

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

그런 다음 숨기고 싶다면이 명령을 사용합니다.

var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);

콘솔을 보여주고 싶다면 :

var handle = GetConsoleWindow();
ShowWindow(handle, SW_SHOW);

위의 Adam Markowitz의 답변을 바탕으로 다음은 저를 위해 일했습니다.

process = new Process();
process.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"" + CmdFilePath + "\"");
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//process.StartInfo.UseShellExecute = false;
//process.StartInfo.CreateNoWindow = true;
process.Start();

공유 할 일반적인 솔루션이 있습니다.

using System;
using System.Runtime.InteropServices;

namespace WhateverNamepaceYouAreUsing
{
    class Magician
    {
        [DllImport("kernel32.dll")]
        static extern IntPtr GetConsoleWindow();

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

        const int HIDE = 0;
        const int SHOW = 5;

        public static void DisappearConsole()
        {
            ShowWindow(GetConsoleWindow(), HIDE);
        }
    }
}

프로젝트 에이 수업을 포함시키고 전화하십시오. Magician.DisappearConsole();.

프로그램을 클릭하여 프로그램을 시작하면 콘솔이 플래시됩니다. 명령 프롬프트에서 실행할 때 실행 직후 명령 프롬프트가 매우 사라집니다.

나는 보이지 않는 과정으로 내 컴퓨터의 배경에서 영원히 실행되는 불화 봇을 위해 이것을합니다. Topshelf가 나를 위해 일하는 것보다 쉬웠습니다. 다른 곳에서 찾은 코드의 도움으로 이것을 작성하기 전에 몇 가지 탑 쉘 튜토리얼이 실패했습니다. ;피

또한 Visual Studio> Project> Properties> 애플리케이션의 설정을 콘솔 응용 프로그램 대신 Windows 응용 프로그램으로 시작하도록 설정을 간단히 변경하려고 시도했으며, 내 프로젝트에 대한 내용이 콘솔을 숨기지 못했습니다. 아마도 DSHARPPLUS가 스타트 업에서 콘솔을 시작해야하기 때문일 수 있습니다. . 모르겠어요. 이유가 무엇이든,이 클래스는 콘솔이 나타나면 콘솔을 쉽게 죽일 수 있습니다.

이 마술사가 누군가를 도와주기를 바랍니다. ;)

그냥 써

ProcessStartInfo psi= new ProcessStartInfo("cmd.exe");
......

psi.CreateNoWindow = true;

여기에서 다른 답변이 말했듯이 "출력 유형"을 "Windows 응용 프로그램"으로 변경할 수는 있지만 이것이 사용할 수 없음을 의미합니다. Console.In NullStreamReader가 될 것입니다.

Console.Out 그리고 Console.Error 그러나 여전히 잘 작동하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top