我试图从本地安装的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窗口打开,但没有运行任何参数,也没有返回任何内容。
答案 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"对于参数,它没有启动系统属性。