IP アドレスを使用して PC (その他および自分の) がサーバーとして追加され、ステータスが「実行中」に設定されているアプリケーションがあります。DB にエントリが作成されます。
2 つのサーバー 10.51.1.159 と 10.51.1.136 を追加したとします。更新すると、10.51.1.159 のステータスは「実行中」(ローカルであるため) であり、10.51.1.136 のステータスは「エラー」(リモートであるため) です。デバッグしようとすると、10.51.1.136 に対して次の例外がスローされます。
リモート サーバーが例外 InvalidOperationException をスローします
System.InvalidOperationException: Cannot open notifyservice service on computer '10.51.1.136'. ---> System.ComponentModel.Win32Exception: Access is denied
。
これを行うコードは次のとおりです。
static public void GetServerStatus(DataTable dt, string service)
{
GetServerStatusColumns(dt);
// get the service status for each server in the datatable
ServiceController control = new ServiceController();
foreach (DataRow row in dt.Rows)
{
try
{
control.ServiceName = service;
control.MachineName = row["SERVER_ADDRESS"].ToString();
string status = control.Status.ToString(); // This is not set for 10.51.1.136, jumped to catch block after this.
row["SERVICE_STATUS_ID"] = Convert.ToInt32(Enum.Format(control.Status.GetType(), control.Status, "d")) - 1;
row["SERVICE_STATUS"] = status;
if (status == "Running")
{
row["SERVICE_CANSTART"] = false;
row["SERVICE_CANSTOP"] = true;
}
else
{
row["SERVICE_CANSTART"] = true;
row["SERVICE_CANSTOP"] = false;
}
}
catch (InvalidOperationException exp)
{
row["SERVICE_STATUS_ID"] = 5; // stopped
row["SERVICE_STATUS"] = "Error";
string excep = Convert.ToString(exp);
row["SERVICE_CANSTART"] = false;
row["SERVICE_CANSTOP"] = false;
}
}
}
ファイアウォールがブロックされているかどうかを確認しましたが、ファイアウォールが問題ではないようです。親切に私を助けてください。前もって感謝します。