Я использую TopShelf для размещения своей службы Windows. Это мой код установки:
static void Main(string[] args)
{
var host = HostFactory.New(x =>
{
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new MyService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription(STR_ServiceDescription);
x.SetDisplayName(STR_ServiceDisplayName);
x.SetServiceName(STR_ServiceName);
});
host.Run();
}
Мне нужно убедиться, что только один экземпляр моего приложения может работать одновременно. В настоящее время вы можете запустить его как службу Windows и любое количество консольных приложений одновременно. Если приложение обнаруживает другой экземпляр во время запуска, оно должно завершиться.
Мне очень нравится подход на основе mutex, но я понятия не имею, как это сделать. Работа с ТопШелф.