Haha, malheureux ! Sais-tu que les territoires du côté obscur, sans vergogne tu piétines !
Peu d'amateurs semblent s'aventurer à te répondre…
Comme je suis magnanime, je vais aller jusqu'à te donner un embryon de solution mais accroche-toi bien à la rembarde car la chose est ébouriffante !
(Je viens de lire un article qui commence par "One powerful new feature of Visual Basic .NET is the capability to create a Windows Service". Je me gausse… )
Je ne saurais t'expliquer qu'en langage C :-(
On commence par créer le service (je te passe l'obtention des valeurs path, serviceName, etc.) :
SC_HANDLE schSCManager,schService;
schSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
schService = CreateService(
schSCManager, /* SCManager database */
serviceName, /* name of service */
serviceDisplayName, /* display name */
SERVICE_ALL_ACCESS, /* desired access */
SERVICE_WIN32_OWN_PROCESS, /* service type */
SERVICE_AUTO_START, /* start type */
SERVICE_ERROR_NORMAL, /* error control type */
path, /* service's binary */
NULL, /* no load order group */
NULL, /* no tag identifier */
"Tcpip\0", /* dependencies */
userName, /* account */
userPwd); /* password */
Ensuite il faut aller stocker dans la base de registre le port associé au service. Je te passe les contrôles de code de retour mais ça donne :
sprintf(path,"SYSTEM\\CurrentControlSet\\Services\\%s\\Parameters", serviceName);
RegCreateKeyEx(HKEY_LOCAL_MACHINE,path,0L,"", REG_OPTION_NON_VOLATILE,KEY_SET_VALUE, NULL,&hkey,&dispo);
RegSetValueEx(hkey,"SocketPort",0L,REG_SZ, serverSocketPort, strlen(serverSocketPort)+1);
Voilà , ce code fonctionne mais si tu n'as pas de compilateur tu n'es pas plus avancé qu'au départ ;-) Moyennant peu d'effort on doit pouvoir en faire une commande comme celle qui est fournie en option dans "The Windows NT Resource Kit " mais là je n'ai pas vraiment le temps.