Plusieurs instances d'un même service ?

Signaler
Messages postés
1
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
12 septembre 2003
-
Messages postés
44
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
13 décembre 2004
-
Pourrait-on m'indiquer la solution pour installer plusieurs instances d'un même service sur windows NT (4 ou 2k) sans avoir à modifier et recompiler le code. Mon problème est que lors de l'inscription du service dans la base de registre, windows se base sur le nom du composant (Ici "service1" qui est en dur dans le programme)?
A l'installation de l’instance suivante, windows indique que l'installation est impossible car le service spécifié existe déjà.

Begin End du .dpr :
begin
Application.Initialize;
Application.CreateForm(TService1, service1);
Application.Run;
end.

Merci par avance pour la solution!

5 réponses

Messages postés
320
Date d'inscription
mardi 11 juin 2002
Statut
Membre
Dernière intervention
26 septembre 2008

il aurait peut-être été nécessaire de savoir ce qu'il y a dans
TService1 car il me semble qu'avec une simple fiche ceci ne pose pas se problème.

mais j'imagine, puisque ça ne fonctionne pas, que ce service communique avec windows et que windows interdit une seconde instance.

var
Service2:TService1;

begin
Application.Initialize;
try
Application.CreateForm(TService1, service1);
except
begin
Application.CreateForm(TService1, service2);
end;
end;
Application.Run;
end.

ce n'est assurément pas la bonne méthode mais si ça
fonctionne ça simplifiera la donne ...sinon faudra voir ce que tu demandes dans ce TService1, j'extrapole mais peut-être create process en changeant le nom ?
????

yve
Messages postés
44
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
13 décembre 2004

pour avoir plusieurs instances du meme service, suffit de l'installer, puis de le demarrer, et après de lancer son executable autant de fois que tu veux!

ça ne fonctionne que si le service est deja demarré dans le gestionnaire de services de NT.

je viens de tester et ça marche à merveille.

par contre pourquoi avoir plusieurs instances?
car en fait si t'as ton services lancé plusieurs fois, il va faire la meme chose plusieurs fois, donc personellement je ne trouve pas l'utilité.

mes services je les bloque pour empecher plusieurs instances.

;)
Messages postés
3
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
20 février 2007

et comment fais tu pour les bloquer ?

et une autre question : comment lui faire lire à l'installation ou au demarrage un fichier de conf ... j'ai pas envie de mettre le chemin du fichier en dur .... :)

Merci d'avance pour vos éléments de réponse

Michel
Messages postés
3
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
20 février 2007

Je viens de trouver pour le chemin d'install de l'application :
ExtractFilePath(Forms.Application.ExeName)

Mais pas encore pour le reste :(

Michel
Messages postés
44
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
13 décembre 2004

Pour empecher l'execution de l'application (ou service)
fo utiliser les mutex:
ex =>

(dans la source du projet)

##########################
var
Mutex : THandle;

{$R *.RES}

begin
Mutex := CreateMutex(nil, True, 'Le nom de ton application');
if (Mutex <> 0) and (GetLastError = 0) then
begin
Application.Initialize;
Application.Title := 'Le nom de ton application';
Application.CreateForm(TForm1, Form1);
Application.Run;
if Mutex <> 0 then CloseHandle(Mutex);
end;
##########################

tu remplace par le nom de l'application dans les 2 champs ci-dessus
regarde bien le if du mutex, il verifi si ya une application ki a le meme titre, il ferme l'application (closehandle) et sinon il initialise et lance l'application

voila

-( /"|"\AR|Ø )-