2010-02-11 4 views
4

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?

+0

[WiX] (http://wix.sourceforge.net/) – RailRhoad

Répondre

0

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?

2

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

+0

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

6

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).

-1

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.

+0

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

+0

@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. –

Questions connexes