У меня есть базовая c консольная служба приложений, которая имеет 2 метода Start
и Stop
и запускает ее как оконную службу, используя Topshelf
.
public class MyService
{
public void Start()
{
using (var db = new PersonDbContext())
{
var person = new Person
{
LastName = "test",
};
db.Persons.Add(person);
db.SaveChanges();
}
}
public void Stop()
{
//var context = new PersonDbContext();
//context.Database.Delete();
}
}
Здесь Start
метод create базу данных и вставьте запись человека, здесь я использую EF Code First. Это означает, что при установке службы с использованием Topshelf
и ее запуске создается база данных.
HostFactory.Run(configure =>
{
configure.Service<MyService>(service =>
{
service.ConstructUsing(s => new MyService());
service.WhenStarted(s => s.Start());
service.WhenStopped(s => s.Stop());
});
//Setup Account that window service use to run.
configure.RunAsVirtualServiceAccount();
configure.SetServiceName("MyWindowServiceWithTopshelf");
configure.SetDisplayName("MyWindowServiceWithTopshelf");
configure.SetDescription("My .Net windows service with Topshelf");
configure.BeforeUninstall(() => { DeleteDatabase(); });
});
private static void DeleteDatabase()
{
var context = new PersonDbContext();
context.Database.Delete();
}
База данных успешно удаляется при добавлении кода удаления базы данных по методу Stop
, означает, что служба остановлен.
Но я хочу удалить базу данных в процессе удаления службы. Я пытаюсь добавить код удаления базы данных на configure.BeforeUninstall(() => { DeleteDatabase(); });
или configure.AfterUninstall(() => { DeleteDatabase(); });
, но база данных НЕ удаляется?
При остановке службы тот же код работает нормально, и удаление базы данных в порядке. Пожалуйста, предложите.