我有一个 C# 控制台应用程序,我希望用户无法看到它。
我该如何做到这一点?
我有一个 C# 控制台应用程序,我希望用户无法看到它。
我该如何做到这一点?
在 ProjectProperties 中将“Output Type”设置为 Windows 应用程序。
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();
查看其他可能的解决方案 -
在运行时切换 Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
以及,
当其他方法无效时,可以使用以下代码在C#中隐藏控制台应用程序:
[DllImport("kernel32.dll")]
public static extern bool FreeConsole();
在代码中的任何位置放置FreeConsole(),我将其放置在Init()中,这样命令行就会被隐藏。
你可以使用Pinvoke调用FindWindow()来获取窗口句柄,然后调用ShowWindow()来隐藏窗口 或者 使用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 Bot这样做。这比让TopShelf为我工作要容易得多。在我编写这篇文章之前,我尝试了几个TopShelf教程,但都失败了,最后在其他地方找到了一些代码的帮助。;P
我还尝试简单地更改Visual Studio > Project > Properties > Application中的设置,以将其启动为Windows应用程序而不是控制台应用程序,但由于DSharpPlus需要在启动时启动控制台,因此我的项目中的某些内容阻止了这种方式隐藏我的控制台。我不知道原因。无论原因如何,这个类允许我轻松地在弹出控制台后关闭它。
希望这位魔术师能帮助到某人。;)