51 votes

Installer un service Windows avec SC.exe ou InstallUtil.exe - quelle est la différence ?

SC.exe et InstallUtil installent / désinstallent tous deux des services Windows. Mais ils ne semblent pas fonctionner de la même manière.

Quelle est la différence?


Par exemple, InstallUtil échoue (erreur de fichier ou de dépendance non trouvé) tandis que Sc create installe le service sans problème. Pour ajouter à l'étrangeté; le service n'apparaît pas si je lance net start dans la console. Mais il apparaît dans l'interface graphique des services. Des variantes de cela se produisent lorsque j'essaie de désinstaller.

J'ai écrit le service moi-même et les versions précédentes fonctionnent. Dotnet3.5.

1 votes

Voici un avertissement : la désinstallation (je ne me souviens pas si c'est sc.exe ou installUtil) n'est pas possible si vous avez les services ouverts dans le panneau de contrôle.

0 votes

Peut-être que l'OP rencontre la même erreur que moi : en utilisant InstallUtil, j'ai essayé de configurer le nom du service dans App.config. Il s'avère que nous ne pouvons pas installer le service si nous lisons à partir du fichier de configuration (doit être une question de dépendance). Finalement, nous avons décidé de coder en dur le nom du service. Puis passer à SC

29voto

Hans Passant Points 475940

Oui, installer un service n'est pas particulièrement compliqué. Il suffit d'écrire quelques clés de registre. Vous pouvez jeter un coup d'œil avec Regedit.exe, naviguer jusqu'à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services.

Sc.exe peut également écrire ces clés, en utilisant les arguments de ligne de commande fournis. Néanmoins, ce n'est pas la bonne manière de le faire. L'intérêt d'InstallUtil.exe est qu'il peut activer du code d'installation personnalisé. Du code écrit par l'auteur du service. Ce qui n'est pas si rare, les services ont tendance à stocker des informations de configuration dans leurs clés d'enregistrement pour leur propre usage. Vous verrez de nombreuses preuves de cela lorsque vous regarderez avec Regedit.

4 votes

En particulier, sc.exe ne crée pas les entrées requises pour le Windows EventLog, que les services basés sur .NET utilisent généralement.

0 votes

Je crois que nous pouvons toujours écrire n'importe quel code personnalisé dont nous avons besoin à l'intérieur du service lui-même ? Après avoir travaillé sur quelques projets jusqu'à présent, je ne vois toujours pas ce qu'InstallUtil peut faire que SC ne peut pas faire. Pour le Journal des événements de Windows, nous pouvons le créer nous-mêmes si nécessaire (bien que nous n'utilisions pas beaucoup le Journal des événements). Peut-être que SC s'est amélioré depuis la dernière fois ?

2 votes

Il peut trouver du code .NET avec l'attribut [Installer] et l'exécuter. SC.exe ne peut pas le faire. C'est la manière dont Microsoft l'a documenté, vous n'êtes pas obligé de le faire de cette façon.

17voto

Kat Lim Ruiz Points 381

Je préfère sc.exe à installutil.exe.

InstallUtil vous oblige à ajouter la redoutable classe ProjectInstaller (je crois) et à y coder en dur le nom du service et la description du service.

InstallUtil rend très difficile la possibilité de faire tourner deux versions du même service sur la même machine en même temps.

C'est pourquoi je n'utilise pas du tout InstallUtil.exe. Aussi à cause des réponses précédentes : il doit être inclus dans votre package de déploiement. sc.exe est déjà présent dans toute version de Windows Xp et supérieure (je crois).

5 votes

Ceci n'est pas vrai, vous n'avez pas besoin de coder en dur le nom du service. Avec quelques lignes de code supplémentaires, vous fournissez le nom du service lors de son installation avec installutil.

0 votes

Je ne le savais pas, même si je n'y ai jamais vraiment réfléchi. Merci pour l'info.

1 votes

@furier - Je sais que c'est un ancien commentaire, mais pouvez-vous montrer comment vous fournissez le nom du service?

11voto

Will Points 76760

Installutil est installé avec Visual Studio et est généralement utilisé pour charger rapidement un service .NET pour le débogage (vous ne pouvez pas l'utiliser avec des services natifs).

SC est livré avec Windows et peut être utilisé avec des services gérés et natifs.

Lors du déploiement d'un service, vous ne devriez pas compter sur installutil.exe étant sur la machine cible.

Il y a des différences dans la façon dont ils fonctionnent, mais je n'ai pas de liste définitive. Je sais que installutil supprimera les services immédiatement, mais sc.exe planifie simplement la suppression pour après le prochain redémarrage. Je suis sûr qu'il y en a d'autres comme ça.

5voto

Bizniztime Points 547

La principale différence est que InstallUtil n'est pas un utilitaire destiné à l'installation de services mais un outil d'installation général. Sur les pages MSDN, vous pouvez voir que:

"L'outil d'installation est un utilitaire en ligne de commande qui vous permet d'installer et de désinstaller des ressources serveur en exécutant les composants d'installation dans des assemblies spécifiés. Cet outil fonctionne en conjonction avec les classes de l'espace de noms System.Configuration.Install."

Ainsi, il peut installer des services mais il offre de nombreux autres avantages. Créer des exécutables basés sur la classe Installer vous donne un contrôle programmatique de toute la procédure d'installation/désinstallation. Par exemple, ServiceInstaller et ServiceProcessInstaller sont utilisés pour l'installation de services.

L'utilitaire 'Sc' est utilisé pour le contrôle des services et la commande 'create' va simplement créer un service basé sur l'exécutable choisi.

Dans votre exemple
1. Il n'est pas censé être installé avec InstallUtil et la réponse d'erreur devrait être assez claire à ce sujet.
2. InstallUtil échoue en raison d'un bug dans le code d'installation et l'utilisation de sc create va probablement créer un service défectueux pour vous. Vérifiez le {nom_exe}.InstallLog pour plus de détails.

0 votes

Sc créera également le journal

0 votes

@HoàngLong es-tu sûr de cela? quel est le nom du fichier journal?

0 votes

Le fichier journal est [Nom de fichier].InstallLog et [Nom de fichier].InstallState (). Le InstallLog contient des choses comme "Installation de l'assemblée... Les paramètres affectés sont..." Le InstallState est un fichier XML. Je suis très sûr parce que je l'ai fait sur notre serveur avant (peut-être que cela a changé depuis que vous avez écrit la réponse).

2voto

De l'expérience d'utilisation de la désinstallation : sc.exe sous Windows 7 supprime l'entrée de la liste immédiatement, alors qu'après la désinstallation avec installutil, il est nécessaire de redémarrer

0 votes

Voir le commentaire dans la question originale. Je crois que vous avez le listing des services ouvert dans le panneau de contrôle.

0 votes

Sc fonctionne avec la fenêtre ouverte, installutil non, du moins pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X