J'ai écrit un service Windows pour fonctionner sur Win10, et cela a parfaitement fonctionné jusqu'à ce que je décide de le changer un peu. J'ai réécrit de la logique, l'ai testée dans les configurations de débogage et de version, et tout allait bien. J'ai ensuite désinstallé la version actuelle du service à l'aide de installutil.exe /u %servicename.exe%
Et l'ai réinstallée à nouveau à l'aide de installutil.exe %servicename.exe%
. Pour une raison quelconque, cette nouvelle version ne peut pas démarrer et elle se bloque avec l'erreur 1064. Voici le texte d'erreur complet:
Windows could not start %servicename% service on Local Computer. Error 1064: An exception occurred in the service when handling the control request.
La dernière fois que j'ai installé ce service, j'ai rencontré quelques difficultés, mais je les ai rapidement corrigées en modifiant les propriétés Log On
. Cette fois, cela ne fonctionne pas. Veuillez aider avec ce problème.
Merci.
mise à jour 1
Voici mes méthodes de service Main()
et OnStart()
:
Main()
static void Main()
{
#if DEBUG
var service = new SalesforceToJiraService();
service.OnDebug();
Thread.Sleep(Timeout.Infinite);
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new SalesforceToJiraService()
};
ServiceBase.Run(ServicesToRun);
#endif
}
OnStart()
protected override void OnStart(string[] args)
{
this.ConfigureServices();
this.timer.Start();
this.logger.Information("SalesforceToJira service started.");
}
mise à jour 2
Plus de code:
ConfigureServices()
protected void ConfigureServices()
{
this.configuration = ConfigurationHelper.LoadConfiguration(ConfigurationPath);
this.logger = ConfigurationHelper.ConfigureLogger(this.configuration.Logs.LogsPath);
this.timer = ConfigurationHelper.ConfigureTimer(this.configuration.ProcessInterval.TotalMilliseconds,
(sender, eventArgs) => this.ProcessCasesAsync(sender, eventArgs).GetAwaiter().GetResult());
this.salesforceClient = new SalesforceCliClient(this.configuration.Salesforce.CliPath);
this.jiraClient = Jira.CreateRestClient(
this.configuration.Jira.Url,
this.configuration.Jira.Username,
this.configuration.Jira.Password);
}
J'utilise Newtonsoft.JSON
Pour désérialiser un fichier de configuration JSON, Serilog
pour la journalisation, System.Timers.Timer
Pour les événements périodiques, AtlassianSDK
pour l'API Jira et certains wrappers sur Salesforce CLI
Pour Salesforce.
J'ai eu exactement la même erreur 1064 lors du démarrage de mon service. Pour moi, l'utilisateur auquel j'ai fait enregistrer le service n'était pas un utilisateur valide dans la base de données. Une fois ajouté, cela a très bien fonctionné.