IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Arrêter un service Windows


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut Arrêter un service Windows
    Je souhaite arrêter un service avec le code trouvé sur ce site
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SERVICE_STATUS OpenServStatus;
    SC_HANDLE  schandle, Fservice;
    // Arrête le service "Mises à jour automatiques"
    	schandle=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    CodeErreur = GetLastError();
    	Fservice=OpenService(schandle, "\"Mises à jour automatiques\"", SERVICE_QUERY_STATUS|SERVICE_START|SERVICE_STOP);
    CodeErreur = GetLastError();
    Le premier CodeErreur renvoie bien 0 mais le dernier CodeErreur renvoie 1060 c'est-à-dire "Le service spécifié n'existe pas en tant que service installé".
    Vous vous doutez bien que si je pose la question, c'est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Net Stop "Mises à jour automatiques"
    dans une fenêtre de commandes fonctionne tout a fait correctement.

    Quelqu'un peut-il m'expliquer ? Ou y aurait-il dans BC2006 quelque chose de plus simple ?

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut Altau
    Je ne sais pas si tu a vu ce tuto de CGI sur le site

  3. #3
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Oui, oui, Blondelle, c'est bien pour ça que je pose la question : qu'y a-t-il de particulier pour que mon code ne fonctionne pas ?

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Le code de CGI pour desinstaller un service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Voyons brièvement sa désinstallation. Elle s'effectue avec la fonction DeleteService après avoir ouvert le service avec OpenService. 
    #include "Windows.h"
    #include "Winsvc.h"
    int main()
    {
        SC_HANDLE hSCManager;
        SC_HANDLE hServ;
        hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
     
        hServ=OpenService(hSCManager,"MonService",SERVICE_ALL_ACCESS);
        DeleteService(hServ);
        CloseServiceHandle(hServ);
        CloseServiceHandle(hSCManager);
        return 0;
    }
    ton code differe a partir d'ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fservice=OpenService(schandle, "\"Mises à jour automatiques\"", SERVICE_QUERY_STATUS|SERVICE_START|SERVICE_STOP);
    CodeErreur = GetLastError();
    j'ai aussi trouve un lien sur un site asiatique

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    L'arreter temporairement ou définitivement ou le désinstaller ?

  6. #6
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut
    Il s'agit ici de l'arrêter, et, après avoir exécuté une action particulière, le redémarrer.
    Il n'est pas question de le désinstaller.
    Ce qui m'interpelle, c'est qu'avant-même que je fasse quoi que ce soit, la fonction OpenService échoue (dès la 4ème ligne de code que Blondelle nous montre). Bien sûr, j'ai aussi bien essayé le paramètre "\"Mises à jour automatiques\"" que "Mises à jour automatiques".

  7. #7
    Nouveau candidat au Club
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Par défaut
    Bonjour

    si tu veut avoir aussi des renseignements sur les services, tu peut regarder dans la BDR.
    Il doit bien y en avoir d'autres mais j'ai pas chercher.

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root

    la valeur "DeviceDesc" sont les commentaire dans "services.msc" etc..

    A++

  8. #8
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour Altau
    Le code ci-dessous te permettra de travailler directement avec le nom complet du service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     void  __fastcall TForm10::ProcessServices(char* szDisplayServiceName)
     {
       SERVICE_STATUS OpenServStatus;
       SC_HANDLE  schandle=NULL, Fservice=NULL;
       bool resu=false;
       const MaxLen=255;
       char szDisplayName[MaxLen];
       char szServiceName[MaxLen];
       strcpy(szDisplayName,szDisplayServiceName);
       DWORD cchBuffer=MaxLen;
    // Arrête le service "Mises à jour automatiques"
      schandle=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
      if(schandle)
      {
    	   resu=GetServiceKeyName(schandle,
    							  szDisplayName,
    							  szServiceName,
    							  &cchBuffer);
    	  if(resu)
    	  {
    		Fservice=OpenService(schandle,
    							 szServiceName,
    							 SERVICE_QUERY_STATUS|SERVICE_START|SERVICE_STOP);
    		if (Fservice)
    		{
    		   ControlService(Fservice, SERVICE_CONTROL_STOP, &OpenServStatus);
    		  // Exécute le MSI
    		  //  ShellExecute(Application->Handle, "open", "msiexec.exe", parametres, NULL, SW_SHOWDEFAULT);
    		  // Démarre le service "Mises à jour automatiques"
    		 if(!StartService(Fservice,NULL,NULL))
    		 {
    		  CloseServiceHandle(Fservice);
    		  CloseServiceHandle(schandle);
    		  RaiseLastOSError();
    		 }
    		 else
    		   CloseServiceHandle(Fservice);
    		}
    		else
    		 {
    		  CloseServiceHandle(schandle);
    		  RaiseLastOSError();
    		 }
    	   }
       CloseServiceHandle(schandle);
      }
     }
    ce service est contrôlé par le process svchost il est par contre possible que la demande d'arrêt du service provoque une erreur, lors d'un accès concurrent entre ton application et svchost

    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  9. #9
    Membre chevronné
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par défaut [Résolu]Arrêter un service Windows
    Eh bien ça tourne nickel après compil sous BCB 2006.
    Merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/12/2006, 22h41
  2. Arrêter un service Windows XP et le redémarrer chaque matin
    Par beegees dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 30/09/2005, 11h25
  3. Démarrer et arrêter un service windows
    Par dvarrel dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 28/05/2005, 22h02
  4. [VB6]Arreter un service windows
    Par bouboussjunior dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2004, 17h03
  5. [C#] Icône, barre des tâches et Service Windows
    Par SErhio dans le forum Windows Forms
    Réponses: 17
    Dernier message: 03/09/2004, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo