我正在开发一个从服务器远程接收命令的项目,但是在本地使用命令提示符时遇到问题。一旦我在本地工作,我就会转向远程通信。
问题:
我必须完全隐藏控制台,客户端在使用命令行时不能看到任何响应,但它会显示实例的控制台然后隐藏它。
我必须使用c#向cmd.exe
发送命令并在C#中接收结果。我通过设置StandardOutput ...并输入为true来以一种方式完成它。
命令无效。例如,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盘运行时不运行命令。
答案 0 :(得分:1)
cmd
来运行命令,而是将客户端传递的命令写入.bat
文件,执行程序中的.bat.
文件,这可能会隐藏您的命令命令提示符窗口。process.OutputDataRecieved
事件处理程序对输出执行任何操作。如果要使用管理员权限执行命令,可以使用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