Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD75] Structure d'un exécutable lancé en tant que services NT

5 réponses
Avatar
aprosper_fr
Pour pouvoir être lancé via un service NT, un exécutable doit avoir
une structure très particulière.

L'utilitaire WDSERVICE.EXE fourni par PC SOFT avec l'exemple WD7
Service NT permet de s'affranchir d'une grand partie de ces
contraintes car il assure la gros de la communication avec le
contrôleur des services.

Problème : Cet utiltaire est fourni sans son code source et il n'est
donc pas possible de le personnaliser et de la faire évoluer.

J'ai trouvé sur le net de nombreaux exemples de ce qu'il est
nécessaire de faire pour assurer ces communications mais toujours en
langage C et souvent pas très bien commenté.

Quelqu'un a-t'il déjà écrit complètement en Windev un exécutable
pouvant être directement inscrit en tant que service ?

5 réponses

Avatar
farplus
Après mure réflexion, Alain a écrit :
Pour pouvoir être lancé via un service NT, un exécutable doit avoir
une structure très particulière.

L'utilitaire WDSERVICE.EXE fourni par PC SOFT avec l'exemple WD7
Service NT permet de s'affranchir d'une grand partie de ces
contraintes car il assure la gros de la communication avec le
contrôleur des services.

Problème : Cet utiltaire est fourni sans son code source et il n'est
donc pas possible de le personnaliser et de la faire évoluer.

J'ai trouvé sur le net de nombreaux exemples de ce qu'il est
nécessaire de faire pour assurer ces communications mais toujours en
langage C et souvent pas très bien commenté.

Quelqu'un a-t'il déjà écrit complètement en Windev un exécutable
pouvant être directement inscrit en tant que service ?



Un service est un programme qui se déroule en tâche de fond, sans
ouvrir de fenêtres; donc n'importe quel prog. ayant cette particularité
peut être inscrit comme service. Il y a quelques exemples sous windev
(Wdsernt, WdCnfServ);
Sauf erreur, le programme WDservice ne fait rien d'autre qu'inscrire
les clés valeurs et données nécessaires dans la bdr sous
HK_L_MSystemControlset*Services; (il y a plusieurs niveaux) donc tu
peux explorer la bdr et voir quelles sont les clés nécessaires et
inscrire ton service soit par prog soit à la main.

A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Romain PETIT
Alain avait énoncé :

Problème : Cet utiltaire est fourni sans son code source et il n'est
donc pas possible de le personnaliser et de la faire évoluer.



Apparemment cet utilitaire n'est pas réalisé en W-langage (grande
probabilité qu'il soit écrit en C++), il est donc normal que l'éditeur
ne fournisse ni les sources, ni le moyen de le personnaliser.

J'ai trouvé sur le net de nombreaux exemples de ce qu'il est
nécessaire de faire pour assurer ces communications mais toujours en
langage C et souvent pas très bien commenté.
Quelqu'un a-t'il déjà écrit complètement en Windev un exécutable
pouvant être directement inscrit en tant que service ?



Lclasse de Denis Reimstein est un très bon point de départ (mais je
suppose que tu la connais déjà, vu le nom des différentes méthodes que
tu as utilisées dans ton exemple précédent...)
http://www.windevasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEX0&MDP=&TYPE=SOURCE&

Cela ne convient pas ?

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Thierry Sombreffe
Fouille sur le net, il existe des utilitaires qui permettent de faire
tourner n'importe quel programme, développé en n'importe quoi, en tant
que service (il suffit de ne pas avoir d'interraction avec l'utilisateur).

Romain PETIT wrote:
Alain avait énoncé :

Problème : Cet utiltaire est fourni sans son code source et il n'est
donc pas possible de le personnaliser et de la faire évoluer.




Apparemment cet utilitaire n'est pas réalisé en W-langage (grande
probabilité qu'il soit écrit en C++), il est donc normal que l'éditeur
ne fournisse ni les sources, ni le moyen de le personnaliser.

J'ai trouvé sur le net de nombreaux exemples de ce qu'il est
nécessaire de faire pour assurer ces communications mais toujours en
langage C et souvent pas très bien commenté.
Quelqu'un a-t'il déjà écrit complètement en Windev un exécutable
pouvant être directement inscrit en tant que service ?




Lclasse de Denis Reimstein est un très bon point de départ (mais je
suppose que tu la connais déjà, vu le nom des différentes méthodes que
tu as utilisées dans ton exemple précédent...)
http://www.windevasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEX0&MDP=&TYPE=SOURCE&


Cela ne convient pas ?



Avatar
aprosper_fr
Romain,

je connais effectivement la classe dont tu parles mais elle n'est pas
suffisante. En effet, elle permet bien de créer un service mais si
l'exécutable lancé par ce service n'a pas la structure attendue par la
gestionnaire de service, le démarrage du service échoue.

Thierry,

en effet, WDSERVICE de PC SOFT est écrit en C++ et PC SOFT ne veut pas
en communiquer le code.
Je ne connais pas de programme permettant de lancer en tant que
service n'importe quel exécutable mais je n'ai peut-être pas bien
cherché sur le net.

Ceci dit, ça reviendrait à la même chose qu'utiliser WDSERVICE, c'est
à dire utiliser dans une appli un programme externe dont on a aucun
moyen d'assurer la pérennité. Qui nous dit que WDSERVICE fonctionnera
avec les prochaines version de Windows ou de ses services packs ?

C'est pourquoi je tiens absolument à écrire cette gestion de services
complètement en Windev.
J'ai trouvé une très bonne doc sur les services et je travaille avec
Jérôme Airaudo pour écrire cette gestion en Windev. Si nous y
arrivons, nul doute qu'un exemple sera envoyé à windevasso pour ceux
que ça interesserait.


Thierry Sombreffe wrote in message news:...
Fouille sur le net, il existe des utilitaires qui permettent de faire
tourner n'importe quel programme, développé en n'importe quoi, en tant
que service (il suffit de ne pas avoir d'interraction avec l'utilisateur).

Romain PETIT wrote:
> Alain avait énoncé :
>
>> Problème : Cet utiltaire est fourni sans son code source et il n'est
>> donc pas possible de le personnaliser et de la faire évoluer.
>
>
> Apparemment cet utilitaire n'est pas réalisé en W-langage (grande
> probabilité qu'il soit écrit en C++), il est donc normal que l'éditeur
> ne fournisse ni les sources, ni le moyen de le personnaliser.
>
>> J'ai trouvé sur le net de nombreaux exemples de ce qu'il est
>> nécessaire de faire pour assurer ces communications mais toujours en
>> langage C et souvent pas très bien commenté.
>> Quelqu'un a-t'il déjà écrit complètement en Windev un exécutable
>> pouvant être directement inscrit en tant que service ?
>
>
> Lclasse de Denis Reimstein est un très bon point de départ (mais je
> suppose que tu la connais déjà, vu le nom des différentes méthodes que
> tu as utilisées dans ton exemple précédent...)
> http://www.windevasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEX0&MDP=&TYPE=SOURCE&
>
>
> Cela ne convient pas ?
>


Avatar
Romain PETIT
Dans son message précédent, Alain a écrit :

je connais effectivement la classe dont tu parles mais elle n'est pas
suffisante. En effet, elle permet bien de créer un service mais si
l'exécutable lancé par ce service n'a pas la structure attendue par la
gestionnaire de service, le démarrage du service échoue.



Oui, effectivement.
Je me suis cassé les dents à essayer d'utiliser les API pour créer
l'EXE du service lui-même mais il y a apparement un problème (encore)
avec des call-backs en WD7x (et probablement aussi en WD8).

en effet, WDSERVICE de PC SOFT est écrit en C++ et PC SOFT ne veut pas
en communiquer le code.
Je ne connais pas de programme permettant de lancer en tant que
service n'importe quel exécutable mais je n'ai peut-être pas bien
cherché sur le net.



Personellement, j'utilise :
- soit firedaemon (gratuit pour un usage perso, 1 seul service)
très facile à mettre en place
http://www.firedaemon.com/
- soit ce petit programme en C freeware (sources fournies) qui
fonctionne très bien (avec un bémol, il faut des répertoires courts et
mettre un peu les mains dans le cambouis) :
XYNTService
http://www.codeproject.com/system/xyntservice.asp

Ceci dit, ça reviendrait à la même chose qu'utiliser WDSERVICE, c'est
à dire utiliser dans une appli un programme externe dont on a aucun
moyen d'assurer la pérennité. Qui nous dit que WDSERVICE fonctionnera
avec les prochaines version de Windows ou de ses services packs ?



Oui, donc je te conseille XYNTService (les sources sont fournies)

C'est pourquoi je tiens absolument à écrire cette gestion de services
complètement en Windev.
J'ai trouvé une très bonne doc sur les services et je travaille avec
Jérôme Airaudo pour écrire cette gestion en Windev. Si nous y
arrivons, nul doute qu'un exemple sera envoyé à windevasso pour ceux
que ça interesserait.



Evidemment, cela interessera beaucoup de monde.
Et même si vous ne réussissez pas à créer l'EXE en Windev, n'hésitez
pas à nous pondre une classe pour la gestion d'un service avec
XYNTService...

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)