回答:
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
コンソールアプリケーションを作成した場合は、デフォルトで非表示にすることができます。
新しいコンソールアプリを作成し、[出力タイプ]タイプを[Windowsアプリケーション]に変更します(プロジェクトプロパティで行います)。
プロセスクラスを使用している場合は、次のように記述できます。
yourprocess.StartInfo.UseShellExecute = false;
yourprocess.StartInfo.CreateNoWindow = true;
前にyourprocess.start();
、プロセスは非表示になります
簡単な答えは次のとおりです。コンソールアプリのプロパティ(プロジェクトのプロパティ)に移動します。[アプリケーション]タブで、[出力タイプ]を[Windowsアプリケーション]に変更するだけです。それで全部です。
FreeConsole APIを使用して、プロセスからコンソールを切り離すことができます。
[DllImport("kernel32.dll")]
static extern bool FreeConsole();
(もちろん、これは、コンソールアプリケーションのソースコードにアクセスできる場合にのみ適用されます)
FreeConsole
、その名前が言うん、それが呼び出される前に、コンソールを示すからWindowsを防ぐことはできません。
[DllImport("kernel32.dll")] static extern bool AllocConsole();
あなたが簡単に実行できるようになりますと、標準のWin32アプリケーションからコンソール
出力に興味がある場合は、次の関数を使用できます。
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も表示しません。
これをクラスに追加して、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);
私はあなたが望むものに正確に答えているわけではないことを知っていますが、あなたが正しい質問をしているのかどうか疑問に思っています。
どちらも使用しないのはなぜですか。
プロセスを実行することだけが目的の場合、これらはより良いオプションのように思えます。
ここで他の回答で「出力タイプ」を「Windowsアプリケーション」に変更できると述べましたが、これはConsole.In
NullStreamReaderになるため使用できないことを意味することに注意してください。
Console.Out
とConsole.Error
しかし、まだ作業罰金に思えます。
Console.In
何かを入力するためのコンソールがないときに、なぜ誰かが使用するのですか?どこからアクセスできますConsole.In
か?これはまったく意味がありません。言い換えると、この場合のConsole.In
a は完全に明白で論理的ですNullStreamReader
。
上記の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();
です。
プログラムをクリックすると、コンソールが点滅します。コマンドプロンプトから実行すると、実行後すぐにコマンドプロンプトが消えます。
私は、コンピューターのバックグラウンドで永遠に実行されるDiscordボットに対して、これを目に見えないプロセスとして実行します。TopShelfを動作させるよりも簡単でした。他の場所で見つけたコードの助けを借りてこれを書く前に、いくつかのTopShelfチュートリアルが失敗しました。; P
また、Visual Studio>プロジェクト>プロパティ>アプリケーションの設定を変更して、コンソールアプリケーションではなくWindowsアプリケーションとして起動することも試みました。プロジェクトに関する何かが原因で、コンソールを非表示にできませんでした。おそらくDSharpPlusが起動時にコンソールを起動するよう要求しているためです。 。知りません。理由が何であれ、このクラスを使用すると、ポップアップしたコンソールを簡単に強制終了できます。
この魔術師が誰かを助けることを願っています。;)