代码之家  ›  专栏  ›  技术社区  ›  Jason

从.NET进程执行sc.exe无法启动和停止服务

  •  0
  • Jason  · 技术社区  · 16 年前

    我正在尝试从远程计算机重新启动服务。这是我的密码。问题是我需要进入 startinfo.filename = "sc.exe" 从我开始 "start /wait sc" 这导致了一个错误。这是我的密码,有什么想法吗?另外,如果有人知道如何在运行之后保持cmd窗口打开,这样我就可以看到运行的代码,那将是非常棒的。

    string strCommandStop1;
    string strCommandStop2;
    string strCommandStart1;
    string strCommandStart2;
    string strServer = "\\" + txtServerName.Text;
    string strDb1 = "SqlAgent$" + txtInsName.Text;
    string strDb2 = "MSSQL$" + txtInsName.Text;
    
    strCommandStop1 = @"start /wait sc " + strServer + " Stop " + strDb1;
    strCommandStop2 = @"start /wait sc " + strServer + " Stop " + strDb2;
    strCommandStart1 = @"start /wait sc " + strServer + " Start " + strDb2;
    strCommandStart2 = @"start /wait sc " + strServer + " Start " + strDb1;
    
    try
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = true;
    
        startInfo.Arguments = strCommandStop1;
        startInfo.Arguments = strCommandStop2;
        startInfo.Arguments = strCommandStart1;
        startInfo.Arguments = strCommandStart2;
        startInfo .FileName = "sc.exe";
    
        Process.Start(startInfo);
    
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
    
    5 回复  |  直到 15 年前
        1
  •  3
  •   Stefan Egli    16 年前

    为什么不使用 ServiceController 班级?这样你就可以更好地控制正在发生的事情。

        2
  •  0
  •   Kim Gräsman    16 年前

    “start”是cmd.exe shell中的一个固有命令,因此使用cmd.exe作为文件名;

    ProcessStartInfo si = new ProcessStartInfo();
    si.CreateNoWindow = true;
    si.Arguments = "/c start /wait sc.exe " + server + " Stop " + database;
    si.FileName = "cmd.exe";
    Process.Start(si);
    

    而且,您对arguments属性的连续重新分配看起来很奇怪。您需要调用进程。为要执行的每个命令行启动。

        3
  •  0
  •   chsh    16 年前

    我认为您的问题是,您的startinfo对象将实际调用:

    sc.exe start /wait sc <strServer> Start <strDb1>
    

    此外,您是否需要使用SC而不是System.ServiceProcess库中的ServiceController类?

        4
  •  0
  •   Jason    16 年前

    感谢我使用ServiceController类的所有人,这使一切变得简单多了。谢谢你的帮助。 J

        5
  •  0
  •   Adrian Pascalin    15 年前

    如果您使用cmd/k并且不使用似乎打开新cmd的start,则控制台可以保持打开状态。 所以应该是像cmd/k sc.exe“+server+”stop“+database这样的东西;