【问题标题】:cmd Arguments not workingcmd参数不起作用
【发布时间】:2011-11-10 23:36:30
【问题描述】:

我正在尝试从本地已安装的 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 窗口,但没有运行任何参数,也没有返回任何内容。

【问题讨论】:

  • 我希望sqlcmd 是程序,-L 是参数。是不是希望在不指定路径的情况下免费获得sqlcmd
  • 您忘记使用/c 标志。见stackoverflow.com/questions/3616010/…
  • /c 将在其工作时插入其中。但这就是问题所在:)柯克的想法是正确的。谢谢。很快就得到了回复。

标签: c# winforms cmd arguments


【解决方案1】:

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

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

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

【讨论】:

  • 这不是问题的解决方案。 /c 所做的只是在争论结束后关闭 cmd。我找到了答案,psi.FileName 必须是 sqlcmd,争论是 -L。感谢 Mark Hall 也发布了这篇文章
  • @Seige 这不是真的。如果没有 /c 或 /k,cmd.exe 根本不会执行参数。因此,这应该可以解决您的问题。但是,正如我已经指出的那样,直接使用 sqlcmd 确实更好。无论如何,我很高兴你把它整理出来。
  • 谢谢斯文。我相信我仍然可以在没有 /c 或 /k 的情况下运行该命令。尽管在我在这里问之前我确实在代码中尝试过这个,但它也没有工作。唯一做的是 sqlcmd。在此之前,我不知道我可以将 sqlcmd 称为 FileName。
【解决方案2】:

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

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

【讨论】:

  • 非常感谢。我刚回来是因为我找到了这个确切的东西。
【解决方案3】:

在命令对我有用之前添加“/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”作为参数,它没有启动系统属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2018-04-27
    • 2013-12-19
    • 2012-11-18
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多