Използвам опция 1. Процесът на актуализиране се актуализира много рядко в наши дни. Той използва XML файл, съдържащ подробности за това откъде да вземете файловете (в момента поддържа SVN, работи върху добавянето на поддръжка на NuGet) и къде да ги поставите. Той също така посочва кои са услуги и кои са уебсайтове и посочва името на услугата, която да се използва за всеки проект.
Процесът анкетира източника, ако има налична нова версия, той я копира в директория с номера на нова версия и след това актуализира услугата. Той също така съхранява 5 копия на всяка актуализация, което улеснява връщането назад, ако има проблем.
Ето основната част от кода за програмата за актуализиране, която спира съществуващата услуга, копира файловете и след това я рестартира.
if (isService)
{
log.Debug("Stopping service " + project.ServiceName);
var service = GetService(project);
if (service != null &&
service.Status != System.ServiceProcess.ServiceControllerStatus.Stopped && service.Status != System.ServiceProcess.ServiceControllerStatus.StopPending)
{
service.Stop();
}
service.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped, new TimeSpan(0, 1, 0));
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
log.Debug("Service stopped");
else
log.Error("ERROR: Expected Stopped by Service is " + service.Status);
}
log.Debug("Copying files over");
CopyFolder(checkoutDirectory, destinationDirectory);
if (isService)
{
log.Debug("Starting service");
var service = GetService(project);
// Currently it doesn't create services, you need to do that manually
if (service != null)
{
service.Start();
service.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running, new TimeSpan(0, 1, 0));
if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
log.Debug("Service running");
else
log.Error("Service " + service.Status);
}
}
person
Ian Mercer
schedule
17.09.2011