我在C#中有一个控制台应用程序,我想用户将无法看到它。
我该怎么做?
答案 0 :(得分:52)
将其编译为Windows窗体应用程序。如果您没有明确打开任何Windows,它将不会显示任何UI。
答案 1 :(得分:16)
在ProjectProperties上将输出类型设置为Windows应用程序。
答案 2 :(得分:5)
听起来你不想要一个控制台应用程序,而是一个没有打开(可见)窗口的Windows GUI应用程序。
答案 3 :(得分:4)
使用以下代码创建一个控制台应用程序“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();
}
您可能需要修复某些项目,因为我没有检查代码的正确性,它可能无法编译,因为某些属性名称可能不同,但希望您明白这一点。
答案 4 :(得分:2)
最好的方法是在没有窗口的情况下启动该过程。
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
和
Bring another processes Window to foreground when it has ShowInTaskbar = false
答案 5 :(得分:2)
要在C#中隐藏控制台应用程序时没有其他工作,请使用以下代码:
[DllImport("kernel32.dll")]
public static extern bool FreeConsole();
将FreeConsole()放在代码中的任何位置,我将它放在Init()中,并隐藏命令行。
答案 6 :(得分:1)
您可以Pinvoke调用FindWindow()来获取窗口的句柄,然后调用ShowWindow()来隐藏窗口 要么 使用ProcessStartInfo.CreateNoWindow
从另一个应用程序启动您的应用程序答案 7 :(得分:0)
我有一个通用的解决方案可供分享:
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>项目>属性>应用程序中的设置以作为Windows应用程序而不是控制台应用程序启动,并且我的项目中的某些内容阻止了它隐藏我的控制台-也许是因为DSharpPlus要求启动一个启动时控制台。我不知道。不管是什么原因,此类都可以让我在弹出控制台后轻松终止控制台。
希望这位魔术师可以帮助别人。 ;)
答案 8 :(得分:-3)
创建一个wcf服务并根据需要托管它。