Je viens de créer un simple service Windows .NET. Mes utilisateurs sont supposés le télécharger sur mon site et l'installer sur leur ordinateur. Donc, à partir de divers messages du forum (y compris ce site), je sais que pour ce faire, j'ai besoin d'un installateur. Ou je peux simplement leur donner des fichiers de service et leur indiquer comment l'installer. J'ai commencé par créer un projet d'installation et j'ai pu compiler mon propre programme d'installation .msi. Mais un utilisateur s'est plaint qu'il ne peut pas le désinstaller maintenant. J'ai fait des recherches et trouvé que le format .msi a quelques problèmes, principalement liés à la façon dont il compte les références dans GAC. Cependant, il était très facile de l'aider à réparer son ordinateur. De mes conversations avec les utilisateurs, je sais qu'il serait presque impossible de les former pour utiliser sc.exe ou installutil.exe. J'ai également trouvé un service au http://installer.codeeffects.com qui peut construire un programme d'installation pour mon service sans aucun code mais je ne suis pas sûr si mon installateur devrait être msi ou exe. Donc, clairement, je suis dans une confusion totale ici :) S'il vous plaît aider les gars, tout conseil général ou détaillé sera très apprécié.Quelle est la meilleure façon de créer le programme d'installation du service Windows .NET?
Répondre
Ma suggestion serait le MSI pour installer les fichiers à l'emplacement requis, y compris les fichiers batch qui exécutent le fichier installutil.exe. Ensuite, postez les étapes d'installation qui exécutent les fichiers batch. Pour la désinstallation, la même approche - les fichiers batch sont exécutés en tant qu'étape de pré-désinstallation, puis la désinstallation se poursuit. Je devais faire quelque chose de similaire avant. Et je sais que c'est une douleur. Pourquoi ne pas utiliser le programme d'installation intégré de VS?
Pourquoi? J'utilise ça depuis des années. Le problème (et la raison pour laquelle vous pensez que cela ne fonctionne pas) est que pour un service Windows, vous devez ajouter des actions personnalisées pour que le service puisse s'enregistrer.
Jetez un oeil à cela, et au Pour ajouter une action personnalisée au projet d'installation section:
http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
Bien que la réponse soit correcte au moment de l'écriture, le modèle "Projet d'installation" a été supprimé dans VS2012 et reste absent dans VS2013. – MickyD
Avoir votre service accepte un argument pour se faire enregistrer en tant que service:
MyService.exe /i
Dans votre service, vous vérifiez cet argument, et le cas échéant obtenir le service registre lui-même:
ManagedInstallerClass.InstallHelper(args);
Voir my answer pour this question pour plus de détails. De cette façon, vous pouvez demander à l'utilisateur d'enregistrer lui-même le service de manière simple via la ligne de commande.
Si cela est encore trop compliqué pour vos utilisateurs, vous pouvez utiliser Environment.UserInteractive
pour vérifier si l'utilisateur a double-cliqué sur le service. Si c'est le cas, installez/désinstallez le service. Si ce n'est pas le cas, démarrez le service (il s'agit de la route empruntée lorsque le service démarre via l'applet de services et au démarrage de la machine).
Voici un guide étape par étape très pratique sur la création d'un programme d'installation de service à l'aide de Visual Studio 2005. (Il est virtuellement identique dans Visual Studio 2008).
http://aspalliance.com/1316_Working_with_Windows_Service_Using_Visual_Studio_2005.all
Il m'a beaucoup aidé: D
Je pense que vous pouvez découpler le service de votre application. Demandez au service d'appeler un exécutable avec la logique d'application actuelle, et vous pouvez maintenir votre fichier exécutable en le réinstallant plusieurs fois sans avoir à désinstaller/réinstaller votre partie de service de l'application.
Cela vient d'une personne fatiguée de traiter avec le programme d'installation de Microsoft. Vous pouvez obtenir une réponse beaucoup mieux d'un gourou de l'installateur chevronné. Je ne suis pas sûr de l'avoir attendu. J'ai eu un problème similaire et c'est probablement mon approche related question.
Ceci souffre d'un syndrome de poulet et de l'oeuf. Pour avoir un service _never-requires-update_, il faut toujours l'installer ** au moins une fois ** et cela nécessite généralement ** un installateur **. – MickyD
@Micky, lorsque vous avez un service de production que vous ne pouvez pas installer ou désinstaller, comme cela m'est arrivé. Vous souhaitez que l'exécutable ait été séparé en premier lieu. Si vous avez le temps d'investir dans l'apprentissage de toutes les bizarreries du processus de l'installateur de service, cela peut être très bien. Bien sûr, prenez ceci et tous les conseils avec un grain de sel. –
- 1. Quelle est la meilleure façon de déboguer un programme de service Windows dans Visual Studio 2008
- 2. Quelle est la meilleure façon d'appeler un service Web à partir de Windows Mobile (.NET 3.5)
- 3. Quelle est la meilleure façon d'enregistrer un service Windows existant dans .NET?
- 4. Quelle est la meilleure façon de faire ce programme Java?
- 5. Quelle est la meilleure façon de créer des déploiements ClickOnce
- 6. Quelle est la meilleure façon de dupliquer fork() dans Windows?
- 7. Quelle est la meilleure façon de créer une bibliothèque client pour une API de service Web?
- 8. Quelle est la meilleure façon d'exposer l'API de mon serveur?
- 9. Quelle est la meilleure façon de surveiller une application .NET?
- 10. quelle est la meilleure façon de créer un menu javascript?
- 11. Quelle est la meilleure façon de modifier les informations d'identification d'un service Windows en utilisant C#
- 12. Quelle est la meilleure façon d'appeler/démarrer un service Windows toutes les x secondes?
- 13. Meilleure façon de créer des applications Windows
- 14. Quelle est la meilleure façon de vérifier la capacité du système de fichiers en utilisant .Net?
- 15. Quelle est la meilleure façon de tester une application Windows CE/.NET CF?
- 16. Quelle est la meilleure façon de programmer le MIDI pour Windows?
- 17. Quelle est la meilleure façon d'implémenter un travail planifié à l'aide d'un service Windows?
- 18. Quelle est la meilleure façon d'automatiser le remplacement de texte?
- 19. Quelle est la meilleure façon d'organiser le code orienté objet?
- 20. Désinstallation de Windows Service par programme .NET
- 21. quelle est la meilleure façon de modifier le fichier csv
- 22. Quelle est la meilleure façon de gérer mes licences logicielles?
- 23. Quelle est la meilleure façon de renommer (déplacer) les branches du système de fichiers dans .NET?
- 24. Quelle est la «meilleure pratique» pour l'emplacement des fichiers journaux du service Windows?
- 25. Quelle est la meilleure façon d'apprendre WCF?
- 26. Quelle est la meilleure façon d'implémenter hashCode()?
- 27. Quelle est la meilleure façon d'exécuter `sum_by_sql`?
- 28. Quelle est la meilleure façon d'apprendre CUDA?
- 29. La meilleure façon d'écrire un service client "RESTful" dans .Net?
- 30. Quelle est la meilleure façon de simplifier le code suivant?
[WiX] (http://wix.sourceforge.net/) – RailRhoad