Un service NT répond à un interfaçage de message pour le démarrage, la mise en pause et l'arrêt. Un script seul ne peut donc être installé.
Le NT Ressource Kit 3 fournit INSTSRV et ANYSRV, le premier installant le second qui est l'interface service.
Comme exemple on crée un service appelé PerlService :
`c:\\peliproc\\instsrv.exe PerlService c:\\peliproc\\srvany.exe`;
Cela installe une entrée dans la base de registres. Vous pouvez alors finir l'installation à la main comme spécifié dans la documentation de ces outils ou modifier via Win32::Registry les entrées :
$p = "SYSTEM\\CurrentControlSet\\Services\\PerlService"; $main::HKEY_LOCAL_MACHINE->Open($p,$srv)||die "open: $!";
et maintenant créer la clef Parameters contenant
ce que l'on fait ainsi :
$srv->Create("Parameters", $param) or die "Create: $!"; $param->SetValueEx("Application", 0, REG_SZ, "c:\\perlproc\\scan.cmd"); $param->SetValueEx("AppParameters", 0, REG_SZ, "2>c:\\temp\\toto.out"); $param->SetValueEx("AppDirectory", 0, REG_SZ, "c:\\perlproc\\");
On lance donc scan.cmd dans le répertoire
c:\perlproc
(N.B. :: il faut répéter
le #2830#> séparateur de répertoire sous NT, qui sert à
'échapper' i.e. utiliser les caractères spéciaux sous perl, donc pour
avoir #2831#> on le double: \\).
L'argument est 2>c:\temp\toto.out
, on
redirige la sortie erreur standard (STDERR sous perl, descripteur de
fichier numéro 2 sous tout les O.S.) vers un fichier.
Maintenant il faut pouvoir démarrer le service.
`d:\\winnt\\system32\\net.exe start PerlService`;
La seule chose que cet exemple passe sous silence est que le service est démarré avec le compte SYSTEM qui sous NT a plus de priorités que les autres comptes, même Administrator. Il est possible en modifiant la base de Registres de spécifier un autre utilisateur, mais ... il faut rentrer un mot de passe, ce que je ne sais pas faire via la base de registres ...