Выполнение sc.exe из .NET Process не может запустить и остановить службу - PullRequest
0 голосов
/ 31 июля 2009

Я пытаюсь перезапустить службу с удаленного компьютера. Вот мой код Проблема в том, что мне нужно ввести 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 ]

3 голосов
/ 31 июля 2009

Почему вы не используете класс ServiceController ? Таким образом, вы сможете лучше контролировать происходящее.

0 голосов
/ 11 июня 2010

Консоль может оставаться открытой, если вы используете cmd / k и без запуска, который, кажется, открывает новый cmd. поэтому должно быть что-то вроде cmd / k sc.exe "+ сервер +" Стоп "+ база данных;

0 голосов
/ 04 августа 2009

Спасибо всем, что я использовал класс ServiceController, и это сделало все намного проще. Спасибо за вашу помощь. J * * +1001

0 голосов
/ 31 июля 2009

Я думаю, что ваша проблема в том, что ваш объект startInfo будет на самом деле вызывать:

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

Кроме того, есть ли какое-то конкретное требование к использованию sc вместо класса ServiceController из библиотеки System.ServiceProcess?

0 голосов
/ 31 июля 2009

«start» является встроенной командой в оболочке cmd.exe, поэтому используйте 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 выглядит странно. Вам необходимо вызывать Process.Start для каждой командной строки, которую вы хотите выполнить.

...