.Net Core 2.0 Service Windows
Je suis en train de construire un Service Windows .Net Core 2.0 mais j'ai été frapper ma tête sur le mur pour une journée complète et aucun progrès.
Tout semble être l'utilisation de Core 1.0/1.1 même la documentation de Microsoft:
L'hôte d'un ASP.NET Core application dans un Service Windows
TopShelf ne prend pas en charge 2.0 ainsi, pour ce que j'ai vu.
J'ai vu un peu bizarre solutions que de mettre tout le code dans un .Net Standard de la Bibliothèque de la Classe et ensuite utiliser un .Net Framework d'application pour héberger le Service de Windows, mais cela n'a pas l'air élégant dans mes yeux et je suis en train d'essayer de se débarrasser of.Net Cadre tout à fait.
Est ce que je veux faire encore possible à l'heure actuelle? Ai-je raté quelque chose de vraiment basique?
il y a une bonne raison à cela, cependant. .NET de Base 2.1 a dramatique IO liées à des améliorations de performances qui ne sont pas .NET Framework.
OriginalL'auteur DGaspar | 2017-10-04
Vous devez vous connecter pour publier un commentaire.
Il est maintenant possible de créer un Service Windows .NET Core 2.0 sans les bibliothèques de tiers, grâce à la sortie de la Windows Pack De Compatibilité (au moment de l'écriture, encore en bêta). Que la page elle-même met en garde:
En particulier, la rédaction d'un Service Windows .NET de Base peut-être possible, mais vous n'obtiendrez pas de compatibilité multiplate-forme de la boîte, parce que les assemblées pour les plates-formes autres que Windows va juste jeter un
PlatformNotSupportedException
si vous essayez d'utiliser le code de service. Travail autour de ce qui est possible (à l'aide deRuntimeInformation.IsOSPlatform
, par exemple), mais c'est une autre question tout à fait.Aussi, les bibliothèques de tiers peut encore offrir une interface plus conviviale en ce qui concerne l'installation du service de la rédaction, la version actuelle du pack de compatibilité (
2.0.0-preview1-26216-02
) ne prend pas en charge laSystem.Configuration.Install
espace de noms, de sorte que le défaut de l'approche avec unServiceProcessInstaller
classe etinstallutil
ne fonctionnera pas. Plus sur cela plus tard.Avec tout ce que dit, supposons que vous avez créé un nouveau service Windows (
Service1
) à partir du modèle de projet (n'est pas strictement nécessaire, car il ne contient rien d'intéressant, d'autres qu'une classe héritant deServiceBase
). Tout ce que vous devez faire pour la faire construire .NET Core 2.0 est de modifier et de remplacer les.csproj
avec le nouveau format:Puis supprimer
properties\AssemblyInfo.cs
depuis il n'est plus nécessaire et entrera en conflit avec les informations de version dans le projet lui-même.Si vous avez déjà un service et qu'il a des dépendances, de la conversion peut être plus compliqué. Voir ici.
Maintenant, vous devriez être en mesure d'exécuter
dotnet publish
et obtenir un exécutable. Comme mentionné, vous ne pouvez pas utiliser laServiceProcessInstaller
classe pour installer le service, de sorte que vous devrez manuellementCela peut être fait avec quelques PowerShell. À partir d'un taux élevé d'invite de commandes dans l'emplacement qui contient votre fichier exécutable:
Ce n'est pas l'idéal de plusieurs façons: cela dur-codes le chemin du message fichier de ressources (nous devrions vraiment être de déterminer où c'est à partir de l'exécutable et l'exécution des chemins dans le registre), et il est difficile de codes-le nom du service et le nom de l'exécutable. Voulez-vous donner à votre projet de ses propres capacités d'installation en faisant un peu de ligne de commande de l'analyse en
Program.cs
, ou utiliser l'une des bibliothèques mentionnés dans Cocowalla réponse.OriginalL'auteur Jeroen Mostert
Je vais résumer quelques options:
ServiceBase
. Bien sûr, ce besoin de l' .NET Framework doit être installé sur l'ordinateur cibleJe pense que @JeroenMostert commentaire est un peu sévère, je peux voir l'appel de ne pas être dépendant d'un particulier .NET Framework version disponible sur les ordinateurs cibles. Beaucoup d'autres évidemment ressens la même chose, que les 2 repos j'ai lié sont plutôt populaire.
OriginalL'auteur Cocowalla
.NET de Base 2.1 vous êtes en mesure d'utiliser l'ordinateur Hôte et HostBuilder pour obtenir une console application qui s'exécute comme un service. Si vous placer votre console application, vous pouvez déployer le contenant n'importe où et c'est juste le même que l'exécution en tant que service. Vous êtes en mesure d'utiliser l'ordinateur Hôte et HostBuilder pour gérer DI, l'exploitation forestière, L'arrêt, etc dans la console application. Jetez un oeil à:
Des services d'hébergement .NET de Base l'application de la console
OriginalL'auteur Peter
Peut-être que c'est une dérobade, mais n'oubliez pas qu'avec plus de docker en charge, vous pouvez être en mesure de construire un service qui s'exécute dans un conteneur. À ce point, il serait encore .net de base (2.0) mais en cours d'exécution sur votre machine windows. Ce qui est plus, vous pouvez déployer un peu partout dans l'avenir.
Comme dotnet core mûrit, I c'est la meilleure solution, en supposant que votre service ne nécessite pas de ressources locales à l'hôte.
OriginalL'auteur Killnine
Un moyen facile de créer un .NET de Base du service Windows est par l'utilisation de Peter Kottas' DotNetCore.WindowsService bibliothèque.
Le package NuGet est PeterKottas.DotNetCore.WindowsService. Pour l'installer à l'aide de Visual Studio Manager Console, il suffit d'exécuter
Il y a des notes sur la façon de commencer, trop.
OriginalL'auteur Marathon55
Que Microsoft a publié le Microsoft.De Windows.La compatibilité, je voudrais l'utiliser, comme cela semble être le mieux pour une utilisation future.
Exemple Simple de l'autonomie de l'installation de service est ici https://github.com/janantos/service_core
Je crois que l'exemple de code est plus que de pointer du doigt l'utilisation que
Il n'est pas rien. C'est à seulement quelques appels à
sc.exe
sans aucune explication. Que le dépôt github peut disparaître à tout moment, ce qui ferait de ce réponse inutilisable. Comme il est, quelqu'un a déjà savoir sur les services et lessc.exe
juste de comprendre ce qui contient des pensions deEn outre, Jeroen la réponse explique les étapes importantes qui sont absentes de cette repo - configuration de la source de l'événement.
Un lien vers une solution est la bienvenue, mais assurez-vous que votre réponse est utile sans elle: ajouter un cadre autour du lien ainsi les autres utilisateurs auront une idée de ce qu'il est et pourquoi il est là, alors la citation de la partie la plus pertinente de la page que vous créez un lien dans le cas de la page cible n'est pas disponible. des Réponses qui sont un peu plus qu'un lien peut être supprimé.
OriginalL'auteur Jan Antoš