编写一个C#程序,运行时会弹出黑框,请问如何让程序后台运行。

解决方案 »

  1.   

    用C#开发Windows服务监控系统使用
      一、 什么是Windows服务?  其实,Windows服务只是运行于后台的并不要求我们了解的一种进程而已。而且,它们的绝大部分并不要求用户交互。如果我们在"开始"菜单的"运行"命令行下输入"services.msc"并回车,那么我们就可以看到在我们当前的系统中运行的服务情况。其中,有一些服务是当系统启动时自动启动的。但是,也有一些服务必须在我们的手工启动下才能运行。  二、 Windows服务的优点  1. 能够自动运行。  2. 不要求用户交互。  3. 在后台运行。  一般情况下,Windows服务被用于耗费时间很多的进程中,例如备份数据库,等等。
      

  2.   

    不选Console Application,那用哪个Project呢,其他都是带界面的。
      

  3.   

    正解!楼主开来接触编程时间不长。简单的,应用程序可以分为:控制台程序(就是你说的“黑框”,呵呵)、winForm程序,web程序,服务程序(windows服务是其中之一)...
    你这个可以做成window服务程序,把你的服务做成像打开这个services.msc里面的服务一样。
      

  4.   

    也可以做成winform程序,在程序启动时,设定隐藏窗口即可。毕竟服务时需要安装的,winform程序无需安装,拷贝过去即可
      

  5.   

    [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
    public static extern int FindWindowEx(IntPtr hWnd1, int hWnd2, string lpsz1, string lpsz2);
    [DllImport("user32.dll", EntryPoint = "GetWindowText")]
    public static extern int GetWindowText(int hwnd, StringBuilder lpString, int cch);
    [DllImport("User32 ")]
    public static extern bool SendMessage(int hWnd, int Msg, int wParam, IntPtr lParam);public const int WM_GETTEXT = 0xD;
    private static void Test04()
    {
        bool running = true;
        new Thread(() =>
        {
            while (running)
            {
                Process[] process_array = Process.GetProcesses();
                foreach (Process p in process_array)
                {
                    if (p.MainWindowTitle.IndexOf("记事本") != -1)//找到了
                    {
                        int hEdit = FindWindowEx(p.MainWindowHandle, 0, "Edit", "");
                        string w = " ";
                        IntPtr ptr = Marshal.StringToHGlobalAnsi(w);
                        if (SendMessage(hEdit, WM_GETTEXT, 100, ptr))                        Console.WriteLine(Marshal.PtrToStringAnsi(ptr));
                    }
                }
                int tick = Environment.TickCount;
                while (running && Environment.TickCount - tick < 10000)
                {
                    Thread.Sleep(10);
                }
            }
            Console.WriteLine("run over");
        }).Start();
        while (Console.ReadLine().ToLower() != "quit") ;
        running = false;
    }这个是刚才写的一个例子,目的是控制台程序中,建立个线程,每10秒查找一次当前的进程列表,如果有记事本,则在窗口打印出记事本中的文本。抛开功能,这里已经是很好的控制台程序下的多线程例子了。当你输入quit的时候软件退出,线程退出。反之控制台等待用户输入,同时监视当前进程。
      

  6.   

    不是系统服务,就是一个简单的应用程序,让其他程序定时调用,希望调用时不会弹出一个黑框,就这样。
    有没有像VC那样的有个什么入口参数代码#pragma comment(linker, "/subsystem:\ "windows\ "   /entry:\ "mainCRTStartup\ " " ),什么的,这样就不会弹出黑框了。
      

  7.   

    项目属性->Application Type选择windows application编译即可。