C#
Run only one instance of a program in C#
by Andrew on Nov.13, 2009, under C#, Programming
This example shows you how to ensure that only one instance of an application is running.
// Ensure only one instance of this application is running. bool alone = false; Mutex m = new Mutex(true, "<name>", out alone); if (!alone) { Console.WriteLine("Another instance is already running."); Console.ReadKey(); return; } Console.WriteLine("Running...\n"); Console.ReadKey(); // Needed to ensure only one instance is running. GC.KeepAlive(m);
Restart a Windows service using C#
by Andrew on Nov.13, 2009, under C#, Programming
This example shows how to start, stop and restart a windows service programmatically in C#.
Start service
The following method tries to start a service specified by a service name. Then it waits until the service is running or a timeout occurs.
public static void StartService(string serviceName, int timeoutMilliseconds) { ServiceController service = new ServiceController(serviceName); try { TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } catch { // ... } }
Stop service
The following method tries to stop the specified service and it waits until the service is stopped or a timeout occurs.
public static void StopService(string serviceName, int timeoutMilliseconds) { ServiceController service = new ServiceController(serviceName); try { TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); } catch { // ... } }
Restart service
This method combinates both previous methods. It tries to stop the service (and waits until it’s stopped) then it begins to start the service (and waits until the service is running). The specified timeout is used for both operations together.
public static void RestartService(string serviceName, int timeoutMilliseconds) { ServiceController service = new ServiceController(serviceName); try { int millisec1 = Environment.TickCount; TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); // count the rest of the timeout int millisec2 = Environment.TickCount; timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2-millisec1)); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } catch { // ... } }