使用c#中的命令提示符



我正在处理一个远程从服务器接收命令的项目,但是在本地使用命令提示符时遇到了一个问题。一旦我让它在本地工作,然后我将转向远程通信。

问题:

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

  2. 我必须使用c#向cmd.exe发送命令并在c#中接收结果。我通过设置StandardOutput的一种方式做到了这一点…

  3. 命令不工作。例如,D:应该将目录更改为D,它做到了,但在此之后,如果我们使用dir来查看D中的目录,它不会显示相应的目录。

下面是我的代码:

第一个方法

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驱动器运行时不会运行命令。

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

     var process = new Process();
     var startinfo = new ProcessStartInfo(@"c:usersShashwatDesktoptest.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
     } 
    

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

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

根本不创建

startInfo.CreateNoWindow = true;

这里可以找到一些奖励解决方案:运行命令提示符命令

相关内容

  • 没有找到相关文章

最新更新