使我的控制台应用程序不可见

我正在为我的公共图书馆开发一个控制台应用程序作为学校项目。 控制台应用程序将在用户登录后立即运行并执行一些后台工作。

问题是,我不希望控制台应用程序真正出现。 我需要它隐形。 我需要的最后一件事就是投诉,因为有些人因为CMD窗口打开和关闭而感到害怕,除了图书馆希望它尽可能不可见。

我尝试按照此主题中的代码: http : //social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

但无济于事,我仍然可以看到控制台应用程序在完成所有工作后弹出和关闭。

有没有更好的方法来阻止控制台出现? 谢谢。

最好的办法就是不要将它编译为控制台应用程序! 将其编译为Windows EXE,不会显示任何控制台。 然后,您可以在Main方法中执行任何操作,而无需显示UI。

但无论如何,如果你必须隐藏/显示控制台窗口,我将避免使用FindWindow执行此任务,因为有一个更可靠的API: GetConsoleWindow 。 这将为您提供控制台窗口的HWND,您可以尝试将其传递给ShowWindow。

正如Josh Einstein建议您可以使用ShowWindow Api隐藏窗口。

这是一个例子:

using System.Runtime.InteropServices class CommandLine { [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("Kernel32")] private static extern IntPtr GetConsoleWindow(); const int SW_HIDE=0; const int SW_SHOW=5; static void Main(string[] args) { IntPtr hwnd; hwnd=GetConsoleWindow(); ShowWindow(hwnd,SW_HIDE); //Your logic goes here } } 

我不确定这个代码,因为我还没有测试过。 如果您遇到任何问题,请告诉我。

您是否尝试过:项目属性>应用程序>输出类型:到“Windows应用程序”?

它比控制台应用程序稍微复杂一点……但是如果你想在有人登录时真正在后台运行某些东西,你可以创建一个Windows服务应用程序。

但它在设置和安装Windows服务方面确实需要一些额外的工作,但网上有大量的示例代码:

http://msdn.microsoft.com/en-us/library/9k985bc9(v=VS.80).aspx

http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=VS.80).aspx

http://www.c-sharpcorner.com/uploadfile/mahesh/window_service11262005045007am/window_service.aspx

http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

您好我正在创建一个由任务调度程序调用的控制台应用程序。 我不希望控制台应用程序显示,所以我更改了项目属性以将输出输出到Windows应用程序。

将输出类型更改为Windows应用程序转到:项目 – >项目属性并将输出类型更改为Windows应用程序

我尝试了两种方法2)Searock然后1)Josh —在Searock的解决方案中,控制台应用程序窗口仍然出现,虽然在很短的时间内 – 但是对于Josh的解决方案,控制台没有出现,我的程序也没有任何问题 – 当然我必须使用将信息记录到日志文件的调用替换所有console.writeline调用

注意:我刚刚评论了Josh的解决方案,但我还不能那样做:)