2010-08-16 50 views
18

我正在为我的公共库开发一个控制台应用程序作为学校项目。只要用户登录并执行一些后台工作,控制台应用程序就会运行。使我的控制台应用程序不可见

事情是,我不希望控制台应用程序实际出现。我需要它隐形。我需要的最后一件事是投诉,因为有些人对CMD窗口打开和关闭感到害怕,除此之外,图书馆希望它尽可能不可见。

我想在这个线程的代码如下: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

但无济于事,我仍然可以看到控制台应用程序弹出打开和关闭它做所有的工作后。

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

+0

你有没有试过我的代码?你还在遇到问题吗? – Searock 2010-08-17 14:34:37

回答

36

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

但是在任何情况下,如果你必须隐藏/显示控制台窗口,我会避免使用FindWindow来完成此任务,因为这里有一个更可靠的API:GetConsoleWindow。这会给你控制台窗口的HWND,你可以尝试将它传递给ShowWindow。

+1

这也是我的建议。 +1。 – David 2010-08-16 21:49:40

+0

+!直观,微软风格... – NinjaCat 2010-08-16 21:50:15

+0

啊,我明白了。那么Visual Studio中的“新建项目”会是什么呢? “空项目”?因为我没有看到正常.exe的选项,只有一些表单和控制台应用程序。 – Kratz 2010-08-16 21:51:30

8

你有没有尝试过:项目属性>应用程序>输出类型:到“Windows应用程序”?

+0

我只是这样做了,现在应用程序已损坏,它意味着从嵌入式资源中创建目录和复制文件,现在它不起作用。 :( – Kratz 2010-08-16 21:58:30

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

+1

一个caviat就是服务在用户登录之前就会启动,并且不会绑定到特定的用户帐户。根据你在做什么这可能是有用的或者是令人头疼的。 – 2014-03-04 22:15:06

14

由于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 
    } 
} 

我不知道这个代码,因为我没有测试它。如果您遇到任何问题,请告知我。

+1

这可以工作,但是显示一个当您从另一个进程启动进程时,控制台窗口短暂闪烁。 – Wouter 2014-07-21 14:19:29

2

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

更改输出类型的Windows应用程序 转到:项目 - >项目属性 而改变输出类型的Windows应用程序

0

我想这两种方法2)Searock,然后1)约什 - 与Searock的解决方案控制台应用程序窗口仍然出现,虽然在一个非常短暂的时刻---但是与乔希的解决方案控制台没有出现,也没有我的程序有任何问题 - 当然,我不得不将所有console.writeline调用与呼叫记录的信息输出到一个日志文件

注:我只是评论乔希的解决方案,但我不能做t帽子还挺:)

相关问题