Nouveau service Windows installé, ne démarre pas: "Erreur système 2 ... le système ne peut pas trouver le fichier spécifié"
J'ai installé plusieurs autres services Windows. Net personnalisés avec succès. Un nouveau que j'avais récemment écrit était très similaire aux autres et pendant qu'il était installé sans erreur - en le démarrant avec le contrôleur de service, il n'a pas réussi à démarrer avec la boîte de dialogue d'erreur: Erreur système 2 ... le système ne peut pas trouver le fichier spécifié.
Après le temps et la consternation, la seule chose à laquelle je pouvais penser était significativement différente à propos de ce service était que le chemin et le nom de l'exécutable étaient au moins 10 caractères de plus que l'un de mes autres services. Sur le raccourcissement à la fois le chemin et .nom exe et réinstaller, le service a bien fonctionné: pas d'erreur! Je ne peux que supposer mon chemin ou service précédent ou .nom exe était trop long.
En outre, il serait pertinent de mentionner que j'avais utilisé un code emprunté de "pilote de service" intégré à mon exe pour gérer l'installation/désinstallation du service au contrôleur de service via les appels D'API win. Il pourrait être une limite de caractère a été caché dans ce module de pilote de service.
Je n'ai trouvé aucun document lié à windows pour confirmer s'il existe une limite de caractères liée au système à un chemin ou à un nom de service que j'avais dépassé. Je vais creuser dans le pilote de service lorsque le temps le permet et voir si cela s'avère être le problème. En attendant, je me réjouis de toute idée.
2 réponses
J'ai expérimenté avec certains services de test et j'ai trouvé que ce n'était pas la longueur d'une propriété qui causait mon problème ("erreur système 2 ... le système ne peut pas trouver le fichier spécifié") pour commencer. Mon programme d'installation de service intégré utilise trois propriétés: ServiceName, ServiceTitle, ServiceDescription. Lors de l'installation, j'ai trouvé qu'il écrit un chemin de service complet dans le registre, mais il ne prend pas seulement le nom exe (assembly) réel, il utilise la propriété ServiceName pour construire le chemin! Mon problème était que le nom de service et le nom d'assemblage ne correspondaient pas, donc le fichier n'a pas été trouvé. J'ai utilisé une requête de registre powershell pour exposer le chemin et j'ai finalement remarqué l'incompatibilité à partir de là. Quand j'ai remarqué le problème pour la première fois, je n'avais pas remarqué que lorsque j'ai raccourci le nom du service de quoi que ce soit – que je viens d'utiliser le nom de l'assemblage sans le .exe et c'est ce qui l'a réellement corrigé, pas simplement le raccourcir.
Mon problème était, la création du Service avec la commande Powershell ajouté brakets comme: <C:\Path\To\Service\Service.exe>
au registre.
Replacing < and > with " fixed it for me.