public void WaitForStatus(
ServiceControllerStatus desiredStatus,
TimeSpan timeout
)
desiredStatus
The status to wait for.
timeout
A System.TimeSpan object specifying the amount of time to wait for the service to reach the specified status.
This is a blocking operation.
using Leadtools;
using Leadtools.Dicom.AddIn.Common;
using Leadtools.Dicom.AddIn.Interfaces;
AutoResetEvent statusEvent = new AutoResetEvent(false);
public void InstallServiceTest()
{
ServiceAdministrator admin = new ServiceAdministrator(LEAD_VARS.InstallWin32Dir);
ServerSettings settings = new ServerSettings();
DicomService service;
settings.AETitle = "DICOM_SERVER";
settings.Port = 104;
settings.DisplayName = "Sample Dicom Server";
settings.IpAddress = Dns.GetHostEntry(Environment.MachineName).AddressList[0].ToString();
service = admin.InstallService(settings);
if (service != null && service.Settings.AETitle == "DICOM_SERVER")
{
service.Message += new EventHandler<MessageEventArgs>(service_Message);
service.StatusChange += new EventHandler(service_StatusChange);
Console.WriteLine("Base Directory: {0}", admin.BaseDirectory);
Console.WriteLine("Server Directory: {0}", service.ServiceDirectory);
try
{
AeInfo ae = new AeInfo();
//
// Start the service
//
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(30));
ProcessMessages();
if (service.IsAdminAvailable)
{
//
// Add AE Title
//
ae.AETitle = "CLIENT";
ae.Port = 1000;
ae.Address = string.Empty;
service.SendMessage(MessageNames.AddAeTitle, ae);
}
ProcessMessages();
//
// Pause the service
//
service.Pause();
service.WaitForStatus(ServiceControllerStatus.Paused, TimeSpan.FromSeconds(30));
ProcessMessages();
}
finally
{
if (service.Status != ServiceControllerStatus.Stopped)
{
//
// Stop the service
//
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(30));
}
//
// UnInstall the service
//
admin.UnInstallService(service);
}
}
}
//
// Need to process messages so events get called in time. In a normal windows applications there is no need
// to do this extra processing.
//
private void ProcessMessages()
{
while (!statusEvent.WaitOne(0))
{
Application.DoEvents();
}
}
void service_StatusChange(object sender, EventArgs e)
{
DicomService service = sender as DicomService;
Console.WriteLine(service.Status);
if (service.Status == ServiceControllerStatus.Running || service.Status == ServiceControllerStatus.Stopped ||
service.Status == ServiceControllerStatus.Paused)
{
statusEvent.Set();
}
}
void service_Message(object sender, MessageEventArgs e)
{
if (e.Message.Message == MessageNames.AddAeTitle)
{
if (e.Message.Success)
{
AeInfo ae = e.Message.Data[0] as AeInfo;
Console.WriteLine("AE Title: {0}", ae.AETitle);
Console.WriteLine("IP Address: {0}", ae.Address);
Console.WriteLine("Port: {0}", ae.Port);
}
else
{
Console.WriteLine("Error Adding AETITLE: {0}", e.Message.Error);
}
}
statusEvent.Set();
}