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

Windows Discussion :

C++ Service Window


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut C++ Service Window
    Bonjour,
    Je suis à la recherche d'une librairie qui permettrer d'écoute les intéruptions du disque dur (création de fichier, suppression, modification).
    En effet j'ai déjà réalisé ce code en C# par le biais de la classe Watcher.
    Merci Microsoft pour cette simplicité!!!!
    A présent j'aurai besoin de le dévéloppé en C++ pur et dur (sans license juste des API ou librairie).
    Est ce que un équivalent à la classe Watcher de Microsoft existe ou non en C++?
    Si oui ou peut on la trouvée (car elle se cache bien) ?
    Merci d'avance pour votre aide.

    Soit dit en passant je suis sur un projet d'école ou il nous ai demandé de développer un service windows qui serai à l'écoute
    d'un "Data Center" ou plus un SLAM (groupe de disque). Ce service devra être à l'écoute sur une machine distante (un serveur dédié)
    pour détecter la création de fichier. Par la suite il devra donc indexer les fichier crée dans une base de donné.
    Il de devra indexer le contenu du fichier. Cela nous permettra de requéter cette BDD pour faire des recherche sur mot clés.
    Par exemple Wiki le fait Wiki lorsque que l'on donne un mot clé ou il trouve plusieur article il nous renseigne sur la pertinence de chacun.
    Le module de recherche que nous devons créer devra donner un résultat similére.

    Avez vous un idée de la façon de stocker tout le contenu des fichiers pour effectuer ce type d'applicatif?
    Merci beaucoup et bonne réflection ca pas évident!!!

    ---------
    Spiky33

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015

  3. #3
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Citation Envoyé par spiky33 Voir le message
    Bonjour,
    Je suis à la recherche d'une librairie qui permettrer d'écoute les intéruptions du disque dur (création de fichier, suppression, modification).
    En effet j'ai déjà réalisé ce code en C# par le biais de la classe Watcher.
    Merci Microsoft pour cette simplicité!!!!
    A présent j'aurai besoin de le dévéloppé en C++ pur et dur (sans license juste des API ou librairie).
    Est ce que un équivalent à la classe Watcher de Microsoft existe ou non en C++?
    Si oui ou peut on la trouvée (car elle se cache bien) ?
    Merci d'avance pour votre aide.
    on peut appeler les méthodes du framework .NET dans du code C++ . Il suffit de déclarer les appels avec la directive _gc.

    Sinon voir dans les fonctions des API win32 de Directory Management Functions

    voilà un exemple

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <tchar.h>
    
    void RefreshDirectory(LPTSTR);
    void RefreshTree(LPTSTR);
    
    void WatchDirectory(LPTSTR lpDir)
    {
       DWORD dwWaitStatus; 
       HANDLE dwChangeHandles[2]; 
       TCHAR lpDrive[4];
       TCHAR lpFile[_MAX_FNAME];
       TCHAR lpExt[_MAX_EXT];
    
       _tsplitpath(lpDir, lpDrive, NULL, lpFile, lpExt);
    
       lpDrive[2] = (TCHAR)'\\';
       lpDrive[3] = (TCHAR)'\0';
     
    // Watch the directory for file creation and deletion. 
     
       dwChangeHandles[0] = FindFirstChangeNotification( 
          lpDir,                         // directory to watch 
          FALSE,                         // do not watch subtree 
          FILE_NOTIFY_CHANGE_FILE_NAME); // watch file name changes 
     
       if (dwChangeHandles[0] == INVALID_HANDLE_VALUE) 
          ExitProcess(GetLastError()); 
     
    // Watch the subtree for directory creation and deletion. 
     
       dwChangeHandles[1] = FindFirstChangeNotification( 
          lpDrive,                       // directory to watch 
          TRUE,                          // watch the subtree 
          FILE_NOTIFY_CHANGE_DIR_NAME);  // watch dir. name changes 
     
       if (dwChangeHandles[1] == INVALID_HANDLE_VALUE) 
          ExitProcess(GetLastError()); 
     
    // Change notification is set. Now wait on both notification 
    // handles and refresh accordingly. 
     
       while (TRUE) 
       { 
       // Wait for notification.
     
          dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, 
             FALSE, INFINITE); 
     
          switch (dwWaitStatus) 
          { 
             case WAIT_OBJECT_0: 
     
             // A file was created or deleted in the directory.
             // Refresh this directory and restart the notification.
     
                RefreshDirectory(lpDir); 
                if ( FindNextChangeNotification( 
                        dwChangeHandles[0]) == FALSE ) 
                    ExitProcess(GetLastError()); 
                break; 
     
             case WAIT_OBJECT_0 + 1: 
     
             // A directory was created or deleted in the subtree.
             // Refresh the tree and restart the notification.
     
                RefreshTree(lpDrive); 
                if (FindNextChangeNotification( 
                        dwChangeHandles[1]) == FALSE) 
                    ExitProcess(GetLastError()); 
                break; 
     
            default: 
                ExitProcess(GetLastError()); 
          }
       }
    }
    
    void RefreshDirectory(LPTSTR lpDir)
    {
       _tprintf(TEXT("Refresh the directory (%s).\n"), lpDir);
    }
    
    void RefreshTree(LPTSTR lpDrive)
    {
       _tprintf(TEXT("Refresh the directory tree (%s).\n"), lpDrive);
    }
    Utiliser les API FindFirstChangeNotification et autres


    http://msdn2.microsoft.com/en-us/library/aa364417.aspx
    http://msdn2.microsoft.com/en-us/library/aa363950.aspx


    Mieux encore !!
    http://www.codeproject.com/file/dire...ngewatcher.asp

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Merci beaucoup pour ta response qui ma vraiment orienter j'étais tombé dessus mais je pensais qu'il existé autre chose.

    Par contre ce passage m'interesse:

    Citation Envoyé par Mat.M Voir le message
    on peut appeler les méthodes du framework .NET dans du code C++ . Il suffit de déclarer les appels avec la directive _gc.
    Pourrait tu donner un peu plus d'explication sur cette facon de procéder
    Merci

    --------
    Spiky33

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Citation Envoyé par spiky33 Voir le message
    Soit dit en passant je suis sur un projet d'école ou il nous ai demandé de développer un service windows qui serai à l'écoute
    d'un "Data Center" ou plus un SLAM (groupe de disque). Ce service devra être à l'écoute sur une machine distante (un serveur dédié)
    pour détecter la création de fichier. Par la suite il devra donc indexer les fichier crée dans une base de donné.
    Spiky33
    eh oui mais avec quelle tech logicielle ? En PERL je suis sur que cela se fait en moins de 2 sinon il faut faire des scripts CGI en C . MAIS coté serveur..

    Je doute qu'une appli cliente puisse aller lire un disque distant....
    il faut utiliser des fonctionnalités réseau ou bien Internet genre FTP par exemple

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    eh oui mais avec quelle tech logicielle ? En PERL je suis sur que cela se fait en moins de 2 sinon il faut faire des scripts CGI en C . MAIS coté serveur..

    Je doute qu'une appli cliente puisse aller lire un disque distant....
    il faut utiliser des fonctionnalités réseau ou bien Internet genre FTP par exemple
    Pour cette réponse aussi je ne comprend pas trés bien.
    En fait je souhaiterai tout faire en C++ (si c'est possible).
    En fait on aurai un BDD de type Microsoft SQL et notre application devra détecter la création de fichier sur un disque distant (le DataCenter) et enfin récupérer ces fichiers pour les lire et indexé en BDD avec les mots clé pertinant.

    En fait d'une je suis a la recherche d'un algo ou quel chose pour récupérer le mot pertinant dans un phrase (style pour enlever les 'et,la, la' .... et récupérer les verbe sujets complément par exemple).

    Sinon je ne connait pas du tout le PERL et il parait que c'est pas si simple que c'est un langue assez du a assimiler.

    Merci.

  7. #7
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonjour,
    soit j'ai juste rien compris (il est tard), soit il y a un problème sérieux dans le poste ...
    On parle de perl, de CGI bref de web, il est indiqué quelques pars que ce projet devait être un projet web?

    De toutes manière je doute très sérieusement que tu puisses récupérer des informations sur un autre système sans 1 -> avoir les droits nécessaire, 2 -> installer une application cliente.

    Pour moi il faut, 1 service client sur chaque machine à écouté, qui hoock les API de gestion de disque, une socket pour transferer les données recoltée, et sur la machine qui recevra les informations, bha forcement une socket aussi pour communiqué et un logiciel serveur pour traiter les informations reçue.

    Après j'ai peut être juste rien compris à l'énoncé ...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Ben en fait sloshy, Il y aura bien une partie Web mais ce n'est pas moi qui m'en occupe. On fera du web access sur une BDD qui permettrera de faire des recherche de fichiers sur des mot clés. Pour cela mon application (la partie serveur et ecoute des disques) renseignera la BDD et indexera tous le contenu des fichiers dans la BDD pour que la partie Web puisse faire des requete pour la recherche.

    J'espere mettre bien fait comprendre

    Ma partie consiste donc a ecouter les disques distans (sans doute du partage window). Je ne sais pas. En fait ils ont parlés de DataCenter et de SLAM je ne connais pas du tout ces technos. On aurai des fichiers qui serait stockés sur le DataCenter. Phisiquement je ne sait pas si cela sera sur une machine ou pas. Car ma premiére idée était de réaliser ta solution (service sur DataCenter et scoket vers le serveur) mais apparement il ne faudrait que le service du serveur qui accéde au donné du DataCenter.

    Voila en gros. Donc mon probléme principal c'est comment stocker le contenu des fichiers pour effectuer la recherche par mot clé.

    Merci de votre aide.

  9. #9
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. [WinService][C#] Comment déployer un service windows ?
    Par sokette dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/04/2005, 16h38
  2. Planifier le démarrage d'un service Window
    Par tscoops dans le forum Windows XP
    Réponses: 2
    Dernier message: 29/03/2005, 14h56
  3. [WD7.5] Service Windows
    Par cqfd dans le forum WinDev
    Réponses: 1
    Dernier message: 29/03/2005, 08h58
  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