Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用命令提示符#_C#_Cmd_.net 4.5 - Fatal编程技术网

C# 在C中使用命令提示符#

C# 在C中使用命令提示符#,c#,cmd,.net-4.5,C#,Cmd,.net 4.5,我正在从事一个从服务器远程接收命令的项目,但在本地使用命令提示符时遇到了一个问题。一旦我让它在本地工作,那么我将转向远程通信 问题: 我必须完全隐藏控制台,当客户端使用命令行时,客户端不能看到任何响应,但它将显示实例的控制台,然后将其隐藏 我必须使用c#向cmd.exe发送命令,并在c#中接收结果。我通过设置标准输出以一种方式完成了它。。。输入为true 命令不起作用。例如,D:应该将目录更改为D,它确实更改了,但是在这之后,如果我们使用dir查看D中的目录,它不会显示相应的目录 这是我的密码:

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

问题:

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

  • 我必须使用c#向
    cmd.exe
    发送命令,并在c#中接收结果。我通过设置标准输出以一种方式完成了它。。。输入为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;
    
    第二种方法

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

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

     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
     } 
    
    希望对你有帮助


  • 通过添加以下代码行,可以隐藏命令提示窗口:

    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    
    或者根本不创建它

    startInfo.CreateNoWindow = true;
    
    以下是一些奖励解决方案:

    执行
    cmd/cd:
    将cmd.exe实例的工作目录更改为d:。但该实例退出,下次运行cmd.exe时,该目录将与程序的当前工作目录相同。哦,顺便说一下:除非运行Windows 98,否则没有“DOS提示符”。这是Windows命令提示符。DOS在Windows中已经15年没有存在了。当Using shell选项设置为true时,runas不起作用。是否有其他方法将安装程序添加到注册表请向我说明,您是希望cmd命令以管理员权限运行,还是希望c#程序在安装时以管理员权限运行。绝对不是我的cmd,我希望c#程序以管理员身份运行