cmd参数不起作用

时间:2011-09-06 02:51:50

标签: c# winforms cmd arguments

我试图从本地安装的SQL Server实例中获取所有服务器名称。 我知道有一个“sqlcmd -L”命令在cmd中返回此列表。 以下是我用来运行cmd的代码。

Process sqlServers = new Process();
ProcessStartInfo psi = new ProcessStartInfo();
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = false; (DEBUGGING PURPOSES)
psi.FileName = "cmd";
psi.Arguments = @"sqlcmd -L";
psi.UseShellExecute = false;
sqlServers = Process.Start(psi);
string serverList = sqlServers.StandardOutput.ReadToEnd();
sqlServers.WaitForExit(30000);

我在程序的另一部分使用了这个代码库,它工作正常。虽然我没有回读价值。

有人可以帮助我找到为什么当我运行此代码时,cmd窗口打开,但没有运行任何参数,也没有返回任何内容。

3 个答案:

答案 0 :(得分:4)

如果您希望通过“cmd.exe”调用命令,则需要指定“/ c”参数,因此您的代码应如下所示:

psi.FileName = "cmd.exe";
psi.Arguments = "/c sqlcmd -L"

虽然我不清楚为什么你通过“cmd.exe”调用它,而不是直接使用“sqlcmd”。

答案 1 :(得分:3)

如果用您想要运行的程序的名称替换Cmd并分配您的参数,它将起作用。

psi.FileName = "sqlcmd"; 
psi.Arguments = "-L"; 

答案 2 :(得分:0)

添加" / c"在命令为我工作之前。我在命令行中运行命令而不显示cmd窗口。如果要在特定文件夹中运行该命令,可以使用工作目录的路径。

string path = Path.Combine(Directory.GetCurrentDirectory(), "folderInDebug");
var startInfo = new System.Diagnostics.ProcessStartInfo
{
      WorkingDirectory = path,
      FileName = "cmd",
      Arguments = "/c sysdm.cpl",
      UseShellExecute = false
 };
 Process proc = Process.Start(startInfo);

没有" / c"对于参数,它没有启动系统属性。