使用C#编程以编程方式运行命令行代码

24

我正在使用这段代码在Windows命令提示符中运行。 但是我需要使用C#代码以编程方式完成此操作

C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -pdf "connection Strings" "C:\Users\XXX\Desktop\connection string\DNN"

我需要用C#编写程序来实现上述功能,而不是在Windows命令提示符中手动运行以上代码。

3个回答

36

试试这个

ExecuteCommand("Your command here");

使用 process 调用它

 public void ExecuteCommand(string Command)
    {
        ProcessStartInfo ProcessInfo;
        Process Process;

        ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);
        ProcessInfo.CreateNoWindow = true;
        ProcessInfo.UseShellExecute = true;

        Process = Process.Start(ProcessInfo);
    }

5
如果你想要输出:D,使用 /c 而不是 /k。 - ThanhLD

25
您可以使用 Process.Start 方法:
Process.Start(
    @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe",
    @"-pdf ""connection Strings"" ""C:\Users\XXX\Desktop\connection string\DNN"""
);

或者,如果您想更好地控制shell并能够捕获例如标准输出和错误,您可以使用ProcessStartInfo重载:

var psi = new ProcessStartInfo(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe")
{
    Arguments = @"-pdf ""connection Strings"" ""C:\Users\XXX\Desktop\connection string\DNN""",
    UseShellExecute = false,
    CreateNoWindow = true
};
Process.Start(psi);

你可以重定向标准输出,等待进程执行完成,然后读取它。 - Darin Dimitrov

23

你应该可以使用一个过程来完成这个任务。

        var proc = new Process();
        proc.StartInfo.FileName = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe ";
        proc.StartInfo.Arguments = string.Format(@"{0} ""{1}""" ""{2}""","-pdf","connection Strings" ,"C:\Users\XXX\Desktop\connection string\DNN");
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();
        string outPut = proc.StandardOutput.ReadToEnd();

        proc.WaitForExit();
        var exitCode = proc.ExitCode;
        proc.Close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接