如何在C#中隐藏控制台应用程序

时间:2010-05-04 07:55:16

标签: c# console-application hide

我在C#中有一个控制台应用程序,我想用户将无法看到它。

我该怎么做?

9 个答案:

答案 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服务并根据需要托管它。