Comment faire démarrer en tant que Service Windows “Automatique (Début différé)”
Scénario:
Un service WCF exécute en tant que Service Windows. Compte "Utilisateur".
Ce qui est fait:
J'ai annulé la OnBeforeInstall dans le projectinstaller pour être en mesure de définir l'utilisateur et le mot de passe à partir d'un fichier de configuration.
Ce que je serais capable de le faire:
Je voudrais être en mesure de définir la démarrertype Automatique (Début différé)
Ce que j'ai essayé:
J'ai mis la suivante coderow dans le substituée OnBeforeInstall
serviceInstaller1.StartType = ServiceStartMode.Automatic + 1;
Pensé que j'ai le truc de l'ServiceStartMode enum en représentant Automatique (Début différé), n'a pas fonctionné. N'avez pas essayé quelque chose de plus tout simplement parce que je ne pouvais pas trouver quelque chose à essayer.
Ce que j'ai trouvé sur le net:
J'ai trouvé que Automatique (Début différé) sera disponible dans .NET 4, mais cela ne veut pas m'aider.
MSDN
J'ai trouvé que DelayedAutoStart pourraient être ajoutés à la configuration du service de la clé, mais cela se sent comme un hack si je dois le faire à partir du code. Mais c'est peut être la seule solution pour moi à ce point?
Des idées?
Robert Persson, Suède
Vous devez vous connecter pour publier un commentaire.
Maintenant que .NET 4.0 est ici:
Votre seule autre option est d'utiliser P/invoke pour appeler ChangeServiceConfig2 avec
SERVICE_CONFIG_DELAYED_AUTO_START_INFO
. Mais puisque vous semblez être réticents à ajouter l'entrée de registre, je doute que vous souhaitez utiliser P/invoke. Il n'y a aucune autre façon de faire de la .NET Framework (< 4.0).Pour mon .NET Framework 3.5 projet, je peux installer mon service en "Automatique (Retardé)" service en réglant manuellement la
DelayedAutostart
valeur de mon service. Par exemple:Noter que, après l'installation du service, le service ne sera pas répertorié comme "Automatique (Retardé)" jusqu'à ce que après le redémarrage de l'ordinateur.
Je vais développer sur jdknight réponse un peu. J'avais écrit les problèmes d'autorisation, tout en tentant sa solution, donc voici ce que j'ai fait:
J'ai aussi enregistré à la AfterInstall de l'événement par l'ajout d'une nouvelle instance de InstallEventHandler. Je ne sais pas si c'est réellement nécessaire, mais elle ne fait pas de mal non plus:
Fonctionne comme un charme sur .NET Framework 2.0. Comme il a été souligné précédemment, pour les cadres 4 et au-dessus, l'utilisation
selon fiat réponse.