0

リモート マシンからサービスを再起動しようとしています。これが私のコードです。問題は、これ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);
}
4

5 に答える 5

3

ServiceControllerクラスを使用しないのはなぜですか? このようにして、何が起こっているかをより適切に制御できます。

于 2009-07-31T12:32:10.543 に答える
0

cmd /k を使用し、新しいコマンドを開くように見える開始なしで、コンソールを開いたままにすることができます。cmd /k sc.exe " + server + " Stop " + database; のようになります。

于 2010-06-11T09:07:09.877 に答える
0

「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 を呼び出す必要があります。

于 2009-07-31T12:27:03.427 に答える
0

あなたの問題は、あなたの startInfo オブジェクトが実際に呼び出すことだと思います:

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

また、System.ServiceProcess ライブラリの ServiceController クラスを使用する代わりに sc を使用する必要がある特定の要件はありますか?

于 2009-07-31T12:30:25.613 に答える