begin process at 2012 02 09 13:39:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > SERVICE WINDOWS POUR MAINTENIR SA CONNEXION INTERNET

SERVICE WINDOWS POUR MAINTENIR SA CONNEXION INTERNET


 Information sur la source

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Niveau :Initié Date de création :18/11/2004 Date de mise à jour :28/03/2005 09:23:12 Vu / téléchargé :13 988 / 1 129

Auteur : yserver

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


 Description

Le but de ce programme était avant tout la création d'un service. La programmation d'un service windows offre de nombreux avantage sur un programme classique. En tant que service le programme se lance automatiquement et sans action de l'utilisateur il est parfaitement invisible pour l'utilisateur. Il ne necessite pas d'être loggué sur le poste pour s'executer.
J'avais besoin d'avoir un programme très fiable et très légè et parfaitement invisible qui puisse tourner en permance même si l'ordinateur n'était pas logué sous windows, qui puisse faire certaine opération de façon cyclique. J'ai donc créé un service windows. Il est le fruit de mes recherches sur le net sur la programmation d'un service

Le code que je vous livre peut facilement être modifié pour faire d'autres opérations avec tous les avantages d'avoir un programme qui tourne en tant que service windows.

Ce code s'adresse à toutes les personnes qui disposent d'une connexion internet permante ou non et qui souhaite empècher celle ci d'être coupé au bout d'un certaint temps d'inactivité. Il provoque tous les x temps une connexion par le port 80 (HTTP) sur la page google, tout cela en arrière plant ss interaction avec l'utilisateur.
Cela permet soit d'éviter les deconnexions intempestives de certains FAI, soit d'empecher l'expiration du bail internet sur un réseau d'entreprise où l'accès à l'exterieur hors du réseau local est soumis à authentification.


pour installer le service :
mettre l'exe ds le rep ou vous souhaitez qu'il s'execute
ouvrez une fenetre DOS
en suite ds la fenetre DOS taper CD "c:\chemin_jusqu'au_fichier"
et pour finir connexion.exe -i pour l'installer

pour le desinstaller meme chose mais avec le paramètre -d pour le supprimé

Source

  • //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 variable pour le client winsock
  • SOCKET s;
  • in_addr addr;
  • sockaddr_in sin;
  • hostent * host;
  • WSADATA wsa;
  • char buf[1024];
  • int octet = 0;
  • //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)
  • {
  • //Déclaration des variables
  • DWORD status;
  • DWORD specificError;
  • 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(6000); //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)
  • {
  • WSAStartup(0x0202, &wsa);
  • s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  • /*if(s == SOCKET_ERROR){
  • //printf("socket : %d\n", WSAGetLastError());
  • }
  • */
  • host = gethostbyname("www.google.fr"); //l'adresse du site (necessite winsock2.h et ws2_32.lib)
  • memcpy(&addr, host->h_addr, host->h_length);
  • sin.sin_family = AF_INET;
  • sin.sin_port = htons(80); // HTTP
  • sin.sin_addr = addr;
  • if(SOCKET_ERROR == connect(s,(sockaddr*)&sin, sizeof(sin))){
  • //printf("connect : %d\n", WSAGetLastError());
  • }
  • strcpy(buf, "GET http://www.google.fr HTTP/1.0\n\n"); // la requete http
  • send(s, buf, strlen(buf), 0);
  • octet = recv(s, buf, sizeof(buf), 0);
  • closesocket(s);
  • WSACleanup();
  • return 0;
  • }
//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 variable pour le client winsock
SOCKET s;
in_addr addr;
sockaddr_in sin;
hostent * host;
WSADATA wsa;
char buf[1024];
int octet = 0;


//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)
{

    //Déclaration des variables
	DWORD status;
    DWORD specificError;

    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(6000); //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)
{
WSAStartup(0x0202, &wsa);

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
/*if(s == SOCKET_ERROR){
//printf("socket : %d\n", WSAGetLastError());
}
*/

host = gethostbyname("www.google.fr"); //l'adresse du site (necessite winsock2.h et ws2_32.lib)

memcpy(&addr, host->h_addr, host->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(80); // HTTP
sin.sin_addr = addr;

if(SOCKET_ERROR == connect(s,(sockaddr*)&sin, sizeof(sin))){
//printf("connect : %d\n", WSAGetLastError());
}

strcpy(buf, "GET http://www.google.fr HTTP/1.0\n\n"); // la requete http
send(s, buf, strlen(buf), 0);

octet = recv(s, buf, sizeof(buf), 0);


closesocket(s);
WSACleanup();
return 0;
}

 Conclusion

La source est developé sous dev C++ (si qq pouvait la tanscrir sous borland ce serait gentil)
Il est très facile de modifier le nom de l'exe et du service (si necessaire faite moi signe si vous voyez pas comment)
Il est tès facile aussi de rajouter des commandes a executer (pareille faite moi signe)

Je ferais peut être certaine modif pour le rendre plus simple a utilisé notament l'installation du service qui pourait etre plus simple. L'instal necessite un reboot pour demarrer le service, la désinstallation ne supprime pas l'exe...
Si vous êtes interessé par ces petites modif faite moi signe si non pour mon usage perso il restera comme ca

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Release
    • BuildLog.htmTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 222 octets
    • main.objTélécharger ce fichier [Réservé aux membres club]15 288 octets
    • Service Windows.exeTélécharger ce fichier [Réservé aux membres club]40 960 octets
    • Service Windows.pdbTélécharger ce fichier [Réservé aux membres club]257 024 octets
    • vc70.idbTélécharger ce fichier [Réservé aux membres club]117 760 octets
    • vc70.pdbTélécharger ce fichier [Réservé aux membres club]94 208 octets
  • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier7 567 octets
  • Service Windows.ncbTélécharger ce fichier [Réservé aux membres club]27 648 octets
  • Service Windows.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier919 octets
  • Service Windows.suoTélécharger ce fichier [Réservé aux membres club]8 704 octets
  • Service Windows.vcprojTélécharger ce fichier [Réservé aux membres club]3 863 octets

Télécharger le zip


 Historique

22 novembre 2004 19:33:38 :
Correction d'une erreur sur la déclaration des Handle qui generarait le msg a la compile : Connexion.cpp: In function bool InstallService(): Connexion.cpp:176: error: invalid conversion from void* to SC_HANDLE__* Connexion.cpp:181: error: invalid conversion from void* to SC_HANDLE__* Connexion.cpp: In function bool DeleteService(): Connexion.cpp:200: error: invalid conversion from void* to SC_HANDLE__* ds la fonction Installservice : bool InstallService() { char strDir[1024]; SC_HANDLE schSCManager,schService;..... } et ds la fonction DeleteService : bool DeleteService() { SC_HANDLE schSCManager; SC_HANDLE hService;.... }
22 novembre 2004 19:38:18 :
Retire le MessageBox
22 novembre 2004 19:54:32 :
Rajout la creation d'un fichier test.txt qui ecrit test a chaque execution de la fonction principal a des fin de debuggage pour mieux voir ce qui ce passe
22 novembre 2004 20:05:04 :
Ajout du projet DEC C++ au format zip
28 mars 2005 09:23:12 :
Ajout de commentaire pour une meilleurs compréhension. Ajout de la source pour Microsoft Visual C++

 Sources du même auteur

Source avec Zip CLASSE PROGRESS BAR
SUPPRESSION FICHIER TEMP [DEMANDE FORUM]
Source avec Zip PROGRAME SIMPLE, FIABLE ET AUTOREPARABLE POUR PRISE DE MAIN ...

 Sources de la même categorie

Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10
Source avec Zip PETITE CLASSE DE GESTION DES PROCESSUS SOUS WINDOWS par wisar
Source avec Zip KEYLOGGER AVEC NOM DU PROCESSUS ET DE LA FENETRE QUI A LE FO... par wisar
Source avec Zip LINUX USB BOOT LEGER par patatalo

Commentaires et avis

Commentaire de atlandev le 22/11/2004 15:26:31

Pourrais-tu m'indiquer l'exacte marche à suivre pour faire fonctionner cette source avec DevC++ car chez moi ça plante :-((

Connexion.cpp: In function bool InstallService():
Connexion.cpp:176: error: invalid conversion from void*  to SC_HANDLE__*
Connexion.cpp:181: error: invalid conversion from void* to SC_HANDLE__*
Connexion.cpp: In function bool DeleteService():
Connexion.cpp:200: error: invalid conversion from void* to SC_HANDLE__*

Merci

Commentaire de yserver le 22/11/2004 18:00:13

je regarde tout ca et je te dit
c'est une source que j'ai ecrite y a qq temps
depuis que je l'ai compile j'ai peut etre fait qq modif sur le source ss les valide a voir

je jete un oeil et je te fait signe

Commentaire de yserver le 22/11/2004 19:35:43

Voila l'erreur est corrige j'ai mis tout ca a jour et compile le code ss pb
Merci de m'avoir signale le pb
slts

Commentaire de thunderfear le 11/08/2005 15:52:25

hello,
Quand j'ai une erreur de script sur une page web, le programme le signale et bloque le chargement de la page. Comment masquer cette erreur et laisser charger la page??

Merci d'avance.
a bientot.

Commentaire de thunderfear le 11/08/2005 15:53:54

lol désolé je me suis trompé de code :$

Commentaire de mantalo le 10/11/2005 11:00:39

DWORD status;
DWORD specificError;

elle te servent a koi ces variables...

Commentaire de gogomanu le 31/08/2006 18:00:51

Bravo et merci beaucoup !!! C'est le pied d'avoir un code pareil, j'ai pu bien comprendre les services et commencer à convertir un de mes programmes du mode console en service.
Voici un petit bout que j'ai rajouté dans mon propre code, cela sert à affecter une description au service:
(je me suis basé sur http://www.codeproject.com/dotnet/dotnetscmdescription.asp et j'ai refait le code en VC++)
Hé oui il faut aller dans la base de registres! ;-)

Appelez cette fonction à la fin de InstallService() !


<code>
bool service_description(char *service_name,char *service_description)
{
long res;
HKEY key;
char path[1024];

// *** Installer la description dans la base de registres
sprintf(path,"SYSTEM\\CurrentControlSet\\Services\\%s",service_name);
res=RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_ALL_ACCESS,&key);
if(res!=ERROR_SUCCESS) return(false);
res=RegSetValueEx(key,"Description",0,REG_SZ,(const unsigned char*)service_description,strlen(service_description));
if(res!=ERROR_SUCCESS) return(false);
RegCloseKey(key);
return(true);
}
</code>

Commentaire de deck_bsd le 03/10/2006 17:42:57

Exelente source, cela va bcp me servir.

Commentaire de deck_bsd le 03/10/2006 17:54:16

Heu en faite chez moi, ton service ce crée bien, mais il ne fait rien :s

Commentaire de deck_bsd le 03/10/2006 20:08:18

j'ai trouvé, c'est parce que j'ai fait un nouveau projet nommé projet1.exe, hors pour démarrer le service il doit trouver le fichier connexion.exe. Je l'ai rennomé et tout fonctionne impec. très bonne source.

Commentaire de deck_bsd le 04/11/2006 14:34:03

//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

Toutes les minutes ? avec Sleep(6000); ?

Nop toutes les minutes avec Sleep(60000) ;)

++

Commentaire de katsankat le 11/11/2006 19:51:43

Beaucoup de variables globales non justifiées: les appels en mémoires sur blocs contigus offrent de meilleures performances.

Commentaire de gothard le 07/12/2006 03:41:00

Bonjour,

J'utilise Visual c++ et en compilant ce code j'ai eu comme message d'erreur :

"fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe."

J'ai dejà tester pas mal de chose sur la dernière ligne mais rien :-[

Utilisez vous Visual c++ ? Est ce que quelqu'un sait comment résoudre cette erreur?

Merci d'avance

Commentaire de yserver le 08/12/2006 06:09:56

NOn le code est pas developper sous VC++.
C'est certainement cette ligne qui te pose problème : #include <winsock2.h> //Pour le client winsock.
IL faut je crois lionker une lib en plus.

BOn courrage

Commentaire de laetitiavincent le 21/12/2006 16:08:33

Excellent code. Ca m'a permit de bien comprendre comment on pouvait créer un service.
Par contre, un petite question qui n'est pas forcément lié à ton programme mais mon service démarre un programme au démarrage. Cela fonctionne bien, le programme est bien dans la liste des processus avec comme nom utilisateur System. Par contre, je ne vois pas apparaitre la fenetre que je lui demande dans ce nouveau programme. Est-ce lié au fait que je suis sous un autre nom utilisateur ? Et si oui comment je peux faire ???
Merci par avance

Commentaire de yserver le 22/12/2006 07:46:22

Tel que oui c'est normal. De mémoire il faut que tu revois les paramêtre de createservice(), pour qu'il corresponde à ce que tu veux.
Bon courrage

Commentaire de deck_bsd le 24/12/2006 09:51:17

"Par contre, je ne vois pas apparaitre la fenetre que je lui demande dans ce nouveau programme" Il me semble qu'il est mis sur la msdn que un service n'affiche pas de fenêtre sur le mm bureau que les users, certain code sur cppfrance montre comment faire. Mais si tu veut lancer un programme dans ton service, il me semble que un ShellExecute devrai suffire ;)

Commentaire de laetitiavincent le 24/12/2006 10:35:59

C'est bon, ca marche. Il faut activer la coche autoriser le service à interagir avec le bureau dans les propriétés du service ou mettre SERVICE_INTERACTIVE_PROCESS dans le 5° champ du CreateService. Merci à celui qui m'a aidé pour cela.

Commentaire de HasseneBOURNINE le 13/11/2007 11:22:23

EST IL POSSIBLE D'AVOIR L'EXECUTABLE SVP
MERCI D4AVANCE

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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,640 sec (3)

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