Я исследовал наш проект и нашел установщик. Я переопределил метод OnCommitted
и проверил параметр Delayed
, чтобы начать обслуживание сейчас или сделать это позже вручную.
[RunInstaller(true)]
public class CustomInstaller : System.Configuration.Install.Installer
{
public CustomInstaller()
{
_installProcess = new ServiceProcessInstaller { Account = ServiceAccount.NetworkService };
_installService = new CustomServiceInstaller(typeof(ServiceImplementation));
// Remove built-in EventLogInstaller:
_installService.Installers.Clear();
Installers.Add(_installProcess);
Installers.Add(_installService);
}
public override void Install(IDictionary stateSaver)
{
//install
base.Install(stateSaver);
}
protected override void OnCommitted(IDictionary savedState)
{
var delyed = bool.Parse(GetContextParameter(@"Delayed"));
if (!delyed)
{
new ServiceController(GetContextParameter(ServiceNameKey)).Start();
}
}
private string GetContextParameter(string parameterKey)
{
var parameterValue = Context.Parameters[parameterKey];
if (string.IsNullOrWhiteSpace(parameterValue))
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, MissingRequiredParameterErrorMessage, parameterKey));
return parameterValue;
}
}
Что делать, если вы прекратите обслуживание после установки? это сработает для вас? – Viru
@Viru это вариант, но я боюсь, что служба может сделать некоторые действия до остановки, что не подходит для моего приложения. Поэтому я пытаюсь найти решение, чтобы избежать этого. – Backs
Я получил его, но в этом случае вам нужно переопределить метод onStart и предоставить свою собственную реализацию, где вы можете проверить, запущен ли он в первый раз, если да, то не называть начало – Viru