149

コンソールアプリケーションの実行時にコンソールウィンドウを非表示にする方法はありますか?

現在、Windowsフォームアプリケーションを使用してコンソールプロセスを開始していますが、タスクの実行中にコンソールウィンドウを表示したくありません。

4

13 に答える 13

215

コンソールアプリケーションを作成した場合は、デフォルトで非表示にすることができます。

新しいコンソールアプリを作成してから、[出力タイプ]タイプを[Windowsアプリケーション]に変更します(プロジェクトのプロパティで実行)

于 2009-05-07T23:31:19.640 に答える
164

クラスを使用している場合はProcessStartInfo、ウィンドウスタイルを非表示に設定できます。コンソール(GUIではない)アプリケーションの場合は、CreateNoWindowをtrue次のように設定する必要があります。

System.Diagnostics.ProcessStartInfo start =
      new System.Diagnostics.ProcessStartInfo();
start.FileName = dir + @"\Myprocesstostart.exe";
start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Hides GUI
start.CreateNoWindow = true; //Hides console
于 2009-05-07T19:06:13.130 に答える
69

プロセスクラスを使用している場合は、次のように記述できます。

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

yourprocess.start();にプロセスが非表示になります

于 2009-05-11T14:20:55.360 に答える
44

簡単な答えは次のとおりです。コンソールアプリのプロパティ(プロジェクトのプロパティ)に移動します。[アプリケーション]タブで、[出力の種類]を[Windowsアプリケーション]に変更するだけです。それで全部です。

于 2010-09-03T07:25:45.877 に答える
22

FreeConsole APIを使用して、コンソールをプロセスから切り離すことができます。

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

(もちろん、これは、コンソールアプリケーションのソースコードにアクセスできる場合にのみ適用されます)

于 2009-05-07T19:20:52.003 に答える
7

出力に興味がある場合は、次の関数を使用できます。

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();
}

指定されたコマンドラインプログラムを実行し、プログラムが終了するのを待って、出力を文字列として返します。

于 2015-04-09T09:51:09.137 に答える
4

ユーザー入力を必要としないプログラムを作成している場合は、いつでもサービスとして作成できます。サービスはいかなる種類のUIも表示しません。

于 2009-05-07T23:24:49.390 に答える
3

これをクラスに追加して、DLLファイルをインポートします。

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

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

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

そして、それを非表示にしたい場合は、次のコマンドを使用します。

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

また、コンソールを表示したい場合:

var handle = GetConsoleWindow();
ShowWindow(handle, SW_SHOW);
于 2016-07-06T10:14:16.953 に答える
1

私はあなたが望むものに正確に答えていないことを知っていますが、あなたが正しい質問をしているのかどうか疑問に思っています。

どちらも使用しないのはなぜですか。

  1. Windowsサービス
  2. 新しいスレッドを作成し、その上でプロセスを実行します

プロセスを実行するだけであれば、これらはより良いオプションのように聞こえます。

于 2009-05-07T19:06:48.433 に答える
1

Console.Inここで他の回答が「出力タイプ」を「Windowsアプリケーション」に変更できると言っていますが、これはNullStreamReaderになるため使用できないことを意味することに注意してください。

Console.OutConsole.Errorただし、それでも正常に機能しているようです。

于 2013-04-09T11:00:23.050 に答える
1

上記のAdamMarkowitzの回答に基づいて、次のことが私のために機能しました。

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();
于 2017-07-14T05:48:10.273 に答える
1

私は共有する一般的な解決策を持っています:

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();です。

プログラムをクリックして起動すると、コンソールが点滅します。コマンドプロンプトから実行すると、実行直後にコマンドプロンプトが消えます。

これは、コンピューターのバックグラウンドで非表示のプロセスとして永久に実行されるDiscordボットに対して行います。TopShelfを動作させるよりも簡単でした。他の場所で見つけたコードの助けを借りてこれを書く前に、いくつかのTopShelfチュートリアルが失敗しました。; P

また、Visual Studio>プロジェクト>プロパティ>アプリケーションの設定を変更して、コンソールアプリケーションではなくWindowsアプリケーションとして起動しようとしましたが、プロジェクトに関する何かが原因で、コンソールが非表示になりませんでした。おそらく、DSharpPlusが起動時にコンソールを起動する必要があるためです。 。知らない。理由が何であれ、このクラスを使用すると、コンソールがポップアップした後に簡単に強制終了できます。

この魔術師が誰かを助けてくれることを願っています。;)

于 2018-11-01T18:58:26.407 に答える
0

書くだけ

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

psi.CreateNoWindow = true;
于 2017-03-02T06:37:38.763 に答える