C#でコンソールアプリケーションを使用していますが、ユーザーに表示されないようにしたいと思います。
どうやってやるの?
Windowsフォームアプリケーションとしてコンパイルします。次に、Windowsを明示的に開かない場合、UIは表示されません。
ProjectPropertiesで、出力タイプをWindowsアプリケーションとして設定します。
コンソールアプリケーションは必要ないようですが、(表示されている)ウィンドウを開かないWindowsGUIアプリケーションが必要です。
次のコードを使用してコンソールアプリケーション「MyAppProxy」を作成し、MyAppProxyを起動ディレクトリに配置します。
public static void main(string[] args)
{
Process p = new Process("MyApp");
ProcessStartUpInfo pinfo = new ProcessStartUpInfo();
p.StartupInfo = pinfo;
pinfo.CreateNoWindow = true;
pinfo.ShellExecute = false;
p.RaiseEvents = true;
AutoResetEvent wait = new AutoResetEvent(false);
p.ProcessExit += (s,e)=>{ wait.Set(); };
p.Start();
wait.WaitOne();
}
コードの正確性を確認しなかったため、ここで特定の項目を修正する必要がある場合があります。一部のプロパティ名が異なる可能性があるため、コンパイルされない場合がありますが、アイデアが得られることを願っています。
最良の方法は、ウィンドウなしでプロセスを開始することです。
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "echo Hello!";
//either..
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
//or..
p.StartInfo.CreateNoWindow = true;
p.Start();
他の考えられる解決策を参照してください-
Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime
そして、
他に何も機能しないときにC#でコンソールアプリケーションを非表示にするには、次のコードを使用します。
[DllImport("kernel32.dll")]
public static extern bool FreeConsole();
FreeConsole()をコードの任意の場所に配置し、それをInit()に配置すると、コマンドラインが非表示になります。
FindWindow()の呼び出しをPinvokeしてウィンドウへのハンドルを取得してから、ShowWindow()を呼び出してウィンドウを非表示にすることができますOR ProcessStartInfo.CreateNoWindowを使用して、別のアプリケーションからアプリケーションを起動します
私は共有する一般的な解決策を持っています:
_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が起動時にコンソールを起動する必要があるためです。 。知りません。理由が何であれ、このクラスを使用すると、コンソールがポップアップした後、コンソールを簡単に強制終了できます。
この魔術師が誰かを助けることを願っています。 ;)