本帖最后由 forty_k 于 2014-07-25 17:51:03 编辑

解决方案 »

  1.   

    没有人理吧。请各位大大给些提示啊。
    今天研究了一天。先设想的是在系统服务中设置成可以与用户交互——直接显示窗口,可这样在win7系统里又存在问题。如果使用API到时可以实现,不过也是在调用别一个EXE 文件,所以我才想到这上边说的方式。就是不知道具体怎么让程序与系统服务交互。得到系统服务做了那些操作。系统服务里怎么设置 , 窗口程序又可怎么获取。
      

  2.   

    可以用Socket实现。
    1、windows服务作为服务端,应用程序作为客户端
    2、定义数据包格式。
    3、服务端负责处理数据库中的数据,每处理完一条,就把处理的数据和处理的结果封装成数据包send给客户端,客户端receive数据包
    4、客户端解析收到数据包,把解析的数据体现在界面上。
      

  3.   

    建议你仔细看看tcp的通信原理,我写了一段demo代码,你参考一下        //windows服务里的服务端
            private void Server()
            {
                int n;
                IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("服务器IP地址"), 9001);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Bind(ipep);
                socket.Listen(10);
                Thread thread = new Thread(new ThreadStart(new Action(() =>
                {
                    while (true)
                    {
                        Socket client = socket.Accept();
                        SqlConnection con = new SqlConnection("数据库连接串");
                        SqlCommand cmd = new SqlCommand("sql", con);
                        con.Open();
                        int i = cmd.ExecuteNonQuery();
                        con.Close();
                        string data = "sql|" + i; //在这里封装数据,通常是自己定义一种数据结构,如struct data{sql;result}
                        client.Send(Encoding.Default.GetBytes(data));
                    }
                })));
            }        //应用程序接收数据
            private void Client()
            {
                byte[] buffer = new byte[1024];
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("服务器IP地址"), 9001);
                socket.Connect(ipep);
                Thread thread = new Thread(new ThreadStart(new Action(() =>
                    {
                        while (true)
                        {
                            int n = socket.Receive(buffer);
                            string data = Encoding.ASCII.GetString(buffer, 0, n);
                            string sql = data.Split('|')[0]; //解析数据包
                            string result = data.Split('|')[1];
                            this.textBox2.Invoke(new Action(() => this.textBox2.Text = sql)); //把接收的数据呈现到客户端界面
                            this.textBox3.Invoke(new Action(() => this.textBox3.Text = result));
                        }
                    })));
            }
      

  4.   

    http://bbs.csdn.net/topics/390844919
    来人呐,兄弟有难! 
      

  5.   

    http://www.cnblogs.com/tearer/archive/2011/12/12/2284427.html
    http://bbs.csdn.net/topics/390128212
      

  6.   

    不用那么麻烦,可以直接监控数据表http://www.cnblogs.com/yjmyzz/archive/2009/06/14/1502921.html