Démarrage automatique d'un service

Signaler
Messages postés
7
Date d'inscription
mardi 27 janvier 2015
Statut
Membre
Dernière intervention
10 février 2015
-
 mgille3 -
Bonjour,
J'ai réalisé des services qui doivent se lancer avant que le premier utilisateur se connecte.
Le démarrage automatique ne se fait pas (Temps de démarrage > 30000 ms dans l'observateur d'évènement)
Pour analyser le problème, J'ai retiré tout traitement.
J'obtiens un service qui se lance bien lorsqu'on fait démarrer, mais ne se lance pas au démarrage du PC
Ceci ne se passe que sur Windows 7.
Ca démarre normalement sur Windows 8.
Une piste ?

13 réponses

Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut,

Dans le gestionnaire de service, comment est défini le démarrage du service ? Est-il bien en automatique ?
Et dans ton source, est-ce que la propriété du service StartType est bien sur stAuto ?

Simon
Messages postés
7
Date d'inscription
mardi 27 janvier 2015
Statut
Membre
Dernière intervention
10 février 2015

Oui dans le démarrage du service il est bien en automatique, et lors du démarrage, il y a le message délai dépassé (plus de 30000 ms) dans l'observateur d'évènement.

Dans le source, il y a bien stAuto.

Il démarre automatiquement s'il est installé dans un PC windows 8
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Hum... Est-ce que ça ne pourrait pas être une histoire de droits ?
As tu essayé d'en démarrer un en ligne de commande ?
(Net Start [Nom du service])
Essaie avec un compte d'utilisateur ET un compte d'admin
Messages postés
7
Date d'inscription
mardi 27 janvier 2015
Statut
Membre
Dernière intervention
10 février 2015

Pour le moment, la commande net start ne marche pas même en administrateur.
Il faut que j'investigue ça
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Elle ne marche pas ? Quel est le message d'erreur ?
Messages postés
7
Date d'inscription
mardi 27 janvier 2015
Statut
Membre
Dernière intervention
10 février 2015

La commande net start marche si le cmd est utilisé en tant qu'administrateur
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Regardes si tu ne peux résoudre le problème en gérant les options de sécurité de tes fichiers... (Si tu écris dans un log par exemple et que le fichier de log n'a pas les autorisations d'écriture pour les utilisateurs) C'est un peu lourd pour ça Windows... :(
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Et sinon, publie ton code... ;)
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Et juste pour info, je suis en train de publier une source qui pourrait t'intéresser en rapport avec le debugage de service windows
Messages postés
7
Date d'inscription
mardi 27 janvier 2015
Statut
Membre
Dernière intervention
10 février 2015

J'ai simplifier encore, et j'ai résolu 1 problème :
Le service de détection des services interactif doit être mis en automatique sur windows 7 pour que je n'ai plus de message d'erreur dans l'observateur d'évènement.
Mon code
type
TSimple_service = class(TService)
Timer1: TTimer;
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure Timer1Timer(Sender: TObject);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Déclarations privées }
nb_son : integer;
public
function GetServiceController: TServiceController; override;
{ Déclarations publiques }
end;

var
Simple_service: TSimple_service;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Simple_service.Controller(CtrlCode);
end;

function TSimple_service.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;



procedure TSimple_service.ServiceStart(Sender: TService; var Started: Boolean);
begin
nb_son := 0;
timer1.Enabled := true;
Started := True;
end;

procedure TSimple_service.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Stopped := true;
end;

procedure TSimple_service.Timer1Timer(Sender: TObject);
begin
if nb_son < 10 then
begin
inc(nb_son);
Try
logmessage('simple_service',EVENTLOG_INFORMATION_TYPE,0,nb_son);
PlaySound('C:\Windows\Media\Ring05.wav', 0, SND_SYNC);
except
if fileexists('C:\Windows\Media\Ring05.wav') then
logmessage('simple_service',EVENTLOG_INFORMATION_TYPE,0,20)
else
logmessage('simple_service',EVENTLOG_INFORMATION_TYPE,0,21);

End;
end
else
Timer1.Enabled := false;
end;

Normalement, il doit jouer 10 fois le son.
Sous Windows 8, c'est ce qui arrive.
Sous Windows 7, il démarre normalement, les messages 1 à 10 sont bien dans l'observateur d'évènement, mais pas de son
Messages postés
7
Date d'inscription
mardi 27 janvier 2015
Statut
Membre
Dernière intervention
10 février 2015

Finalement, le service démarre automatiquement si l'installation se fait dans la commande execute : c:\...\monservice.exe /install.
Dans windows 8, le programme d'installation marche bien, mais sous windows 7 ça fait quelque chose de différent.

Il me reste le problème des sons wav qui fonctionnent en sevice sous windows 8, mais pas sous windows 7.
Sous windows 7, la commande PlaySound('C:\Windows\Media\Ring05.wav', 0, SND_SYNC); fonctionne bien dans un programme avec une session utilisateur
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Désolé, là, je ne peux pas t'aider, je n'ai pas de son sur mon PC... :)
En pas à pas ça ne donne rien ? Pas d'exceptions particulières sur le log par exemple ?
Messages postés
7
Date d'inscription
mardi 27 janvier 2015
Statut
Membre
Dernière intervention
10 février 2015

Le source est celui du donné plus haut.
Les messages de log de 1 à 10 sont bien affiché dans l'observateur d'évènement
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
Bonjour,

les PC sont munis d'une intelligence artificielle et lorsque les sons ne sont pas bons, ils ne les jouent pas..
Mais le son est bien joué dans un programme qui n'est pas un service. La ligne est PlaySound('C:\Windows\Media\Ring05.wav', 0, SND_SYNC). Le fichier Ring05.wav est fourni par microsoft dans les fichiers wav du répertoir Windows\media