Останавливаю службы из списка List<string> таким способом:
namespace ConsoleApplication25 {
class Program {
static List<string> services = new List<string> {
"AdobeARMService", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV"
};
static void Main(string[] args) {
Task.Factory.StartNew(() => Run());
Console.ReadLine();
}
static void Run() {
while (true) {
var temp = ServiceController.GetServices().Where(s => services.Contains(s.ServiceName)).ToList();
temp.ForEach(t => {
try {
t.Stop();
}
catch { }
});
Thread.Sleep(500);
}
}
}
}
А как сделать обход служб в List<string> services ? чтобы их не останавливал, а все остальные службы которых нету в списке остановить.
Очень опасно останавливать все службы... Но хозяин барин...
public async Task<bool> StopAllServicesExcept(params string[] exceptServices)
{
var servicesToStop = ServiceController.GetServices().Where(s => !exceptServices.Contains(s.ServiceName));
var tasks = servicesToStop.Select(s => Task.Run(() =>
{
try
{
s.Stop();
s.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMinutes(1));
return true;
}
catch (Exception)
{
return false;
}
})).ToList();
await Task.WhenAll(tasks);
return tasks.All(t => t.Result);
}
Что тут происходит:
true в случае успешного стопа, иначе - false.true, если все сервисы стопнулись успешно, иначе - false.Вызывать из асинхронной функции просто:
var allServicesStopped = await StopAllServicesExcept("Service1", "Service2");
Если вызывать из Main:
var task = StopAllServicesExcept("Service1", "Service2");
task.Wait();
var allServicesStopped = task.Result;
Сборка персонального компьютера от Artline: умный выбор для современных пользователей