在C#中使用命令提示符

时间:2014-03-16 17:39:11

标签: c# cmd .net-4.5

我正在开发一个从服务器远程接收命令的项目,但是在本地使用命令提示符时遇到问题。一旦我在本地工作,我就会转向远程通信。

问题:

  1. 我必须完全隐藏控制台,客户端在使用命令行时不能看到任何响应,但它会显示实例的控制台然后隐藏它。

  2. 我必须使用c#向cmd.exe发送命令并在C#中接收结果。我通过设置StandardOutput ...并输入为true来以一种方式完成它。

  3. 命令无效。例如,D:应该将目录更改为D,但是之后,如果我们使用dir查看D中的目录,则它不会显示相应的目录。

    < / LI>

    这是我的代码:

    第一种方法

    Process process = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = "/C " + textBoxInputCommand.Text + " >> " + " system";
    process.StartInfo = startInfo;
    process.Start();
    

    第二种方法

    ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + textBoxInputCommand.Text);
    procStartInfo.WorkingDirectory = @"c:\";
    procStartInfo.RedirectStandardOutput = true;
    procStartInfo.UseShellExecute = true;
    procStartInfo.UseShellExecute = false;
    Process proc = new Process();
    proc.StartInfo = procStartInfo;
    proc.Start();
    string result = proc.StandardOutput.ReadToEnd();
    richTextBoxCommandOutput.Text += result;
    

    我希望程序以管理员身份运行,因为它生成的exe文件在从C盘运行时不运行命令。

2 个答案:

答案 0 :(得分:1)

  1. 尝试不要通过将命令传递给cmd来运行命令,而是将客户端传递的命令写入.bat文件,执行程序中的.bat.文件,这可能会隐藏您的命令命令提示符窗口。
  2. 您还可以使用process.OutputDataRecieved事件处理程序对输出执行任何操作。
  3. 如果要使用管理员权限执行命令,可以使用runas命令。它等同于sudo中的Linux命令。这是一段代码可能会对你有所帮助

     var process = new Process();
     var startinfo = new ProcessStartInfo(@"c:\users\Shashwat\Desktop\test.bat");
     startinfo.RedirectStandardOutput = true;
     startinfo.UseShellExecute = false;
     process.StartInfo = startinfo;
     process.OutputDataRecieved += DoSomething;
     process.Start();
     process.BeginOutputReadLine();
     process.WaitForExit();
    
     //Event Handler
     public void DoSomething(object sener, DataReceivedEventArgs args)
     {
           //Do something
     } 
    

    希望它对你有帮助。

答案 1 :(得分:0)

您可以通过添加以下代码隐藏命令提示符窗口:

startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

根本不创建

startInfo.CreateNoWindow = true;

这里可以找到一些奖励解决方案: Run Command Prompt Commands