我正在为我的公共图书馆开发一个控制台应用程序作为学校项目。一旦用户登录并执行一些后台工作,控制台应用程序就会立即运行。
问题是,我不希望控制台应用程序真正出现。我需要它隐形。我需要的最后一件事就是投诉,因为有些人因为CMD窗口打开和关闭而感到害怕,除了图书馆希望它尽可能不可见。
我尝试按照此主题中的代码进行操作: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd
但无济于事,我仍然可以看到控制台应用程序在完成所有工作后弹出和关闭。
是否有更好的方法可以阻止控制台出现?感谢。
答案 0 :(得分:37)
最好的办法就是不要将其编译为控制台应用程序!将其编译为Windows EXE,不会显示任何控制台。然后,您可以在Main方法中执行任何操作,而无需显示UI。
但无论如何,如果你必须隐藏/显示控制台窗口,我将避免使用FindWindow执行此任务,因为有一个更可靠的API:GetConsoleWindow。这将为您提供控制台窗口的HWND,您可以尝试将其传递给ShowWindow。
答案 1 :(得分:16)
由于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
}
}
我不确定这段代码,因为我还没有测试过。如果您遇到任何问题,请告诉我。
答案 2 :(得分:9)
您是否尝试过:项目属性>申请>输出类型:到“Windows应用程序”?
答案 3 :(得分:2)
它比控制台应用程序稍微复杂一点......但如果你想在某人登录时真正在后台运行某些东西,那么你可以创建一个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
答案 4 :(得分:2)
您好我正在创建一个由任务调度程序调用的控制台应用程序。我不希望控制台应用程序显示,所以我更改了项目属性以将输出输出到Windows应用程序。
将输出类型更改为Windows应用程序 转至:项目 - >项目属性 并将输出类型更改为Windows应用程序
答案 5 :(得分:0)
我尝试了两种方法2)Searock然后1)Josh ---在Searock的解决方案中,控制台应用程序窗口仍然出现,虽然在很短的时间内 - 但是对于Josh的解决方案,控制台没有出现也没有我的程序有任何问题 - 当然我必须用一个将信息记录到日志文件的调用替换所有console.writeline调用
注意:我会对Josh的解决方案做出评论,但我还不能这样做:)