begin process at 2012 05 29 13:23:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

Mettre un programme comme service windows


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Mettre un programme comme service windows

lundi 18 juillet 2005 à 17:20:45 | Mettre un programme comme service windows

atifelkhachine



Salut les amis.j veux savoir comment lancer mon programme comme service windows.
lundi 18 juillet 2005 à 17:35:23 | Re : Mettre un programme comme service windows

BruNews

Administrateur CodeS-SourceS
CreateService(), OpenService(), etc...
Si tu avais vraiment écrit un service, je pense que tu devrais savoir, non ?

ciao...
BruNews, MVP VC++
lundi 18 juillet 2005 à 17:51:16 | Re : Mettre un programme comme service windows

atifelkhachine



non. j'ai cree juste un simple programme. mais quand j'entre sur la mmchine qui execute mon programme avec terminal server, là je voi pas mon programe avec les processus. alors un ami m'a dis que mon prog dois se lancer comme service windows .. c'est juste ?
lundi 18 juillet 2005 à 18:05:42 | Re : Mettre un programme comme service windows

BruNews

Administrateur CodeS-SourceS
ben il ne s'est surement pas installé en service tout seul.
Il ne faut d'ailleurs pas mettre nimporte quoi en tant que service, un service doit respecter certaines spécifications, voir MSDN à ce sujet.

ciao...
BruNews, MVP VC++
lundi 18 juillet 2005 à 18:14:06 | Re : Mettre un programme comme service windows

atifelkhachine



Merci pour votre reponses ... mais j ai pas bien saisi ta derniere reponse. j ai compri que si mon programe ne respecte pas certaines spécifications alors il ne vat pas tourner comme service windows .. c ca ? ou il suffi d'utiliser CreateService(), OpenService(), pour faire le travail ...


 Merci
lundi 18 juillet 2005 à 19:05:26 | Re : Mettre un programme comme service windows

BruNews

Administrateur CodeS-SourceS
Ton prog DOIT être écrit comme un service, seulement ensuite tu pourras l'inscrire au SCManager.

ciao...
BruNews, MVP VC++
mardi 19 juillet 2005 à 17:21:58 | Re : Mettre un programme comme service windows

atifelkhachine



bonjour j'ai trouver ce code quelquepart et tout se passe bien la compilation et tout .. mais quand j l 'execute il ne fonctionne pas comme prevu car la fonction int Action(void) ne s'execute pas.... c'est ou le probleme ???    MERCI

---------------------------------------
//Source developpé sous dev c++


//---------------------------------------------------------------------------

//Commande preprocesseur

#include <stdio.h>
#include <time.h>                        //Pour la fonction sleep
#include <winsock2.h>                    //Pour le client winsock

//Déclaration des variables
SERVICE_STATUS m_ServiceStatus;
SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
bool bRunning=true;



//Déclaration des fonctions
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
void WINAPI ServiceCtrlHandler(DWORD Opcode);
bool InstallService();
bool DeleteService();
int Action(void);
//---------------------------------------------------------------------------







//---------------------------------------------------------------------------
//Fonction principal
//Analyse des arguments passé en paramètre.
//Si pas de paramètre passé en argument initialisation du service

int main(int argc, char* argv[])
{
    if(argc>1)
    {
        if(strcmp(argv[1],"-i")==0)  //Control de l'argument passé au prog
            {InstallService();}          //Rien lancement du service
                                     //-i pour enregistement du service

        if(strcmp(argv[1],"-d")==0)  //-d pour désactivation du service
            {DeleteService();}
        }
    else
    {
        //Si pas d'argument :
        //déclaration du service et démarrage dans ServiceMain()

        SERVICE_TABLE_ENTRY DispatchTable[]={{"Connexion",ServiceMain},{NULL,NULL}};
        StartServiceCtrlDispatcher(DispatchTable);
    }
    return 0;
}
//---------------------------------------------------------------------------







//---------------------------------------------------------------------------
//Fontion principal où se situe le code que le service execute

void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{

    m_ServiceStatus.dwServiceType        =SERVICE_WIN32;
    m_ServiceStatus.dwCurrentState       = SERVICE_START_PENDING;
    m_ServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP;
    m_ServiceStatus.dwWin32ExitCode      = 0;
    m_ServiceStatus.dwServiceSpecificExitCode = 0;
    m_ServiceStatus.dwCheckPoint         = 0;
    m_ServiceStatus.dwWaitHint           = 0;

    m_ServiceStatusHandle = RegisterServiceCtrlHandler("Connexion",ServiceCtrlHandler);
    if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
    {
        return;
    }

    m_ServiceStatus.dwCurrentState       = SERVICE_RUNNING;
    m_ServiceStatus.dwCheckPoint         = 0;
    m_ServiceStatus.dwWaitHint           = 0;
    if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
    {

    }

    bRunning=true;

    //C'est la qu'il faut mettre les commandes qui s'éxécuteront pendant tout le temps ou le service fontcionne
    while(bRunning)
    {
        //Commande que le service execute
        //les 4 ligne du dessous servent juste aà montrer que le service tourne et que tout les minutes il écrit test dans le fichier text
        FILE * log ;
        log = fopen ( "c:\\log.txt" , "a" ) ;
        fprintf ( log , "test\n" ) ;
        fclose ( log ) ;
        Sleep(1000); //Le temps est en millisseconde, sert à temporiser l'action pour pas quelle s'execute en boucle
        //on peut aussi avoir une action qui se déclanche sur un évènement partculié
        Action(); //Fonction où mettre le code a executer
    }

    return;
}


//---------------------------------------------------------------------------
//Fonction de control de l'état du service

void WINAPI ServiceCtrlHandler(DWORD Opcode)
{
    switch(Opcode)
    {
        //Si le service reçoit la commande de se mettre en pause
        case SERVICE_CONTROL_PAUSE:
            m_ServiceStatus.dwCurrentState = SERVICE_PAUSED;
            break;

        case SERVICE_CONTROL_CONTINUE:
            m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
            break;

        //Si le service reçoit la commande de stopper
        case SERVICE_CONTROL_STOP:
            m_ServiceStatus.dwWin32ExitCode = 0;
            m_ServiceStatus.dwCurrentState  = SERVICE_STOPPED;
            m_ServiceStatus.dwCheckPoint    = 0;
            m_ServiceStatus.dwWaitHint      = 0;

            SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus);
            bRunning=false; //donc la boucle plus haut ne s'effectura plus
            break;

        case SERVICE_CONTROL_INTERROGATE:
            break;
    }
    return;
}


//---------------------------------------------------------------------------
//Si l'argument est -i enregistement du service ici

bool InstallService()
{
    char strDir[1024];
    SC_HANDLE schSCManager,schService;

    GetCurrentDirectory(1024,strDir);
    strcat(strDir,"\\connexion.exe");
   

    schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);

    if (schSCManager == NULL)
        return false;

    LPCTSTR lpszBinaryPathName=strDir;

    schService = CreateService(schSCManager,"Connexion","Connexion réseaux",
        SERVICE_ALL_ACCESS,     // Type d'acces
        SERVICE_WIN32_OWN_PROCESS, // Type de service
        SERVICE_AUTO_START,     // Pour le demarrage automatique
        SERVICE_ERROR_NORMAL,       // error control type
        lpszBinaryPathName,     // service's binary
        NULL,                       // no load ordering group
        NULL,                       // no tag identifier
        NULL,                       // no dependencies
        NULL,                       // Si null demarrer en tant que compte system
        NULL);                   // Mot de passe : null si demarrer en tant que system

    if (schService == NULL)
        return false;

    CloseServiceHandle(schService);

    return true;
}


//---------------------------------------------------------------------------
//Si l'argument est -d désactivation du service ici

bool DeleteService()
{
    SC_HANDLE schSCManager;
    SC_HANDLE hService;

    schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);

    if (schSCManager == NULL)
        return false;

    hService=OpenService(schSCManager,"Connexion",SERVICE_ALL_ACCESS);

    if (hService == NULL)
        return false;

    if(DeleteService(hService)==0)
        return false;

    if(CloseServiceHandle(hService)==0)
        return false;
    else
        return true;
}


//---------------------------------------------------------------------------
//Fonction pour la connexion a internet

int Action(void)
{
int i=0;
printf("\n%d",i++);
    return 0;
}




----------------------------------------
mercredi 20 juillet 2005 à 13:55:11 | Re : Mettre un programme comme service windows

Alcantornet

Hello j'ai aussi utiliser ce code, voici comment il fonctionne :

Il faut d'abord que le service soit installé pour cela lance le programme avec le paramètre -i :    nomduprog.exe -i

Après vérifie si le service s'est correctement dans le registe va voir les clés dans HKLM\SYSTEM\CurrentControlSet\Services\nom_du_service

le nom du service est définit dans le code (dans la fonction CreateService, je crois)

tu peux démarrer ton service en allant dans la console des services (menu démarrer -> exécuter -> écrit: services.msc -> enter), trouve ton service et clique droit et démarrer.

mais dans ta fonction Action  tu met un printf, hélas tu ne verras pas ton texte car un programme fonctionnant en service tourne en arrière plan et de ce fait tu ne le voit pas.


mardi 7 mars 2006 à 18:12:37 | Re : Mettre un programme comme service windows

yserver

  1. Bonjour je tombe par hazard sur ce poste.
    C'est moi qui est poster ce code : http://www.cppfrance.com/codes/SERVICE-WINDOWS-POUR-MAINTENIR-CONNEXION-INTERNET_27660.aspx

    La fonction action n'avait que peut d'interet, c'est pour cela que j'avait posté le code avec pour tester que le service fontionne pour les personne qui avait besoin de juste verifier si le service tounait bien.
    //Commande que le service execute
  2.         //les 4 ligne du dessous servent juste aà montrer que le service tourne et que tout les minutes il écrit test dans le fichier text
  3.         FILE * log ;
  4.         log = fopen ( "c:\\log.txt" , "a" ) ;
  5.         fprintf ( log , "test\n" ) ;
  6.         fclose ( log ) ;
  7.         Sleep(6000); //Le temps est en millisseconde, sert à temporiser l'action pour pas quelle s'execute en boucle

Car un service par définition ne peut interagire avec l'utilisateur.



Cette discussion est classée dans : programme, windows, service


Répondre à ce message

Sujets en rapport avec ce message

passer un programme en "windows service" cbuilder [ par Sloft ] Comment faire pour faire passer un programme en "windows service" sous c++builder 5, merci ! [C++] Service windows [ par therafou ] Salut,je cherche à mettre en place un service windows en C++,pour éviter d'avoir mon programme que je dois lancé à chaque démarrage et avoir une fenêt Création "Service Windows" en C++ sous visual Studio .NET [ par lherderien ] Bonjour a tous, Je suis confronté à un problème de développement de service windows. J'ai développé un programme en C++ avec Microsoft Visual studio . Exception [ par GrosTony ] Salut,Mon problème commence lors d'un avec un programme que j'ai du récupérer et valider, mais le problème est qu'il avait été testé avec seulement 3 Création d'un service [ par laetitiavincent ] Bonjour à tousJ'ai trouvé un programme qui m'a l'air très bien pour créer un serviceMODÈLE DE SERVICE WINDOWS NT/2000/XP (VERSION C) de Auteur : <font Programme C sous windows en arrière plan [ par Madkiller92 ] Bonjour à tous !Je vais faire simple opur exposer mon problème :j'ai récupéré le code sur ce site pour utiliser le port parallèle comme Entrée/Sortie, Lancer une appli par un service windows [ par jayjay9531 ] Bonjour,J'ai un petit problème avec le service windows que j'ai créé. Il fonctionne bien mais j'ai besoin qu'il lance une applcation, j'utilise :#incl Service Windows [ par Ombitious_Developper ] Salut :Comment peut-on créer un service WINDOWS en C/C++?Je veux créer un programme qui s'exécute en arrière plan.Et Merci ... !!! Problème avec Windows 98 !!! [ par yoyo269 ] Bonjour à toutes et à tous,j'ai un problème de compatiblité avec Windows 98 avec le programme suivant :http://siteayoyo.free.fr/Divers/YoyoCut.exePour question sur service windows [ par deck_bsd ] Bonjour/bonsoir à tous,Voila une petite question qui à mon avis n'en est pas une :DVoila en faite je crée un service et pour cela j'ai créer un projet


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales