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

VB 6 et antérieur Discussion :

Fonction Dir() en Services Windows


Sujet :

VB 6 et antérieur

  1. #1
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut Fonction Dir() en Services Windows
    Bonjour,
    Je suis obligé de passer un petit utilitaire en Service Windows.

    Mais la fonction Dir() ne fonctionne pas
    Que le Path soit en UNC ou normal, cela ne fonctionne pas : Test sur \\ServerData\public\testunc ou R:\testunc


    - J'ai donc essayé l'API OpenFile (http://support.microsoft.com/kb/168519),
    - Le oFile.FileExists de Scripting.FileSystemObject...
    - L'API FindFirstFile()...

    Après je me suis dit qu'en services, Windows ne connait pas le réseau alors j'ai tester le partage sur le C:\Documents and Settings\All Users\Documents\testunc et là ok mon ordi s'appelle TOSS et pourtant \\TOSS\Documents\testunc ..

    En mode service que c:\ fonctionne donc ?

  2. #2
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut
    Bonsoir,

    Tu peux nous montrer le bout de code qui ne fonctionne pas stp
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut
    J'ai travaillé sur un petit exe à part.
    La fonction DIR() je pense qu'il n'y a pas besoin de te faire voir

    La fonction avec OpenFile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function DIR_UNC(ByVal sPath) As Long
        'http://support.microsoft.com/kb/168519
           Dim result As Long
           Dim strucFname As OFSTRUCT
     
           result = OpenFile(sPath, strucFname, OF_EXIST)
    DIR_UNC = result
    Exit Function
           'If result <> -1 Then
           '    DIR_UNC = result 'MsgBox "File found"
           'Else
           '    DIR_UNC = False 'MsgBox "File not found"
           'End If
    End Function
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function FileExists(sFullPath As String) As Boolean
        Dim oFile As Scripting.FileSystemObject
        Set oFile = New Scripting.FileSystemObject
        FileExists = oFile.FileExists(sFullPath)
        Set oFile = Nothing
    End Function
    Aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function FileExists2(ByVal sSource As String) As Boolean
       On Local Error Resume Next
       Dim WFD As WIN32_FIND_DATA
       Dim hFile As Long
     
       hFile = FindFirstFile(sSource, WFD)
       FileExists2 = hFile <> INVALID_HANDLE_VALUE
     
       Call FindClose(hFile)
    End Function
    Et sur le Load :
    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
    Private Sub Form_Load()
        Open "c:\Services.log" For Append As nNumFile
            Print #nNumFile, ""
            Print #nNumFile, Now & "|PAss :" & FileExists2("\\TOSS\Documents\testunc\file.txt")
        Close nNumFile
     
        Open "c:\Services.log" For Append As nNumFile
            Print #nNumFile, Now & "|PAss 0:" & FileExists2("C:\Documents and Settings\All Users\Documents\testunc\file.txt")
        Close nNumFile
     
        Open "c:\Services.log" For Append As nNumFile
            Print #nNumFile, Now & "|PAss 3:" & DIR_UNC("\\TOSS\Documents\testunc\file.txt")
        Close nNumFile
     
        Open "c:\Services.log" For Append As nNumFile
            Print #nNumFile, Now & "|PAss 5:" & DIR_UNC("C:\Documents and Settings\All Users\Documents\testunc\file.txt")
        Close nNumFile
     
        Open "c:\Services.log" For Append As nNumFile
            Print #nNumFile, Now & "|PAss 4:" & Dir("C:\Documents and Settings\All Users\Documents\testunc\file.txt", vbHidden)
        Close nNumFile
     
        Open "c:\Services.log" For Append As nNumFile
            Print #nNumFile, Now & "|PAss 1:" & Dir("\\TOSS\Documents\testunc\file.txt")
        Close nNumFile
    End Sub

  4. #4
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut
    Si je comprend bien tu veux juste tester si le fichier existe ?
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  5. #5
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut
    En effet, comme je l'ai expliqué, le dir() sur un chemin réseau ou UNC renvoi une erreur 52...
    Pour l'instant je fais que les données soit sur le C:\ mais c'est génant

  6. #6
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut
    Ha oui je vois ce que tu veux dire.
    J'ai pallier a ce probleme en faisant ceci, je sais que ce n'est pas très élégant mais ca a résolu mon probleme.

    Je ne sais pas si ca peut te servir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Adressecompt = "\\Serveur2\Exploitation\Applications\Config-log\[FL]Automate_listing.log"
     
            On Error GoTo back
            If Dir(Adressecompt, vbNormal) = "" Then          'c'est que le fichier n'existe pas
    back:
     
          ' Test sur les lettres des disque dur si pas D: ou pas de C: on n'enregistre pas.
                If Dir("C:\Program Files\Automate_Listing", vbDirectory) <> "" Then
                    AdresseComptLocal = "C:\Program Files\Automate_listing\[FL]cache_automate_listing.log"  ' si sur C:
                ElseIf Dir("D:\Program Files\Automate_Listing", vbDirectory) <> "" Then
                    AdresseComptLocal = "D:\Program Files\Automate_listing\[FL]cache_automate_listing.log" ' si sur D:
                Else
                    Exit Sub
                End If
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  7. #7
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut
    ok merci je vais creuser ça

  8. #8
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Points : 1 875
    Points
    1 875
    Par défaut
    Fais surtout beaucoup de test.

    Mais dans la logique j'ai voulu lever l'exception et la traiter.
    Si tu trouve une solution plus élégante je suis bien entendu preneur
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  9. #9
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Points : 366
    Points
    366
    Par défaut
    La meilleure solution pour moi sera de finir de tout passer en C#... mais bon, ca peut pas se faire rapidement.
    Mais je te tiens au courant ici de la finalité que je donne à ce problème

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 243
    Points : 328
    Points
    328
    Par défaut
    Voici un bout de code d'un service "test" qui attendait qu'un fichier d'un certain nom apparaisse dans un répertoire donné lors de son installation.

    Il faut ajouter une référence au "Microsoft Scripting Runtime" dans ton projet.

    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
     
    Private Function Traitement(ByVal iter As Long) As Boolean
     
    	Dim nom As String
    	Dim fic As String
    	Dim Fichier As File
    	Dim Chemin As String
     
    	On Error GoTo Traitement_Error
    	' récupération du chemin
    	' ...
     
    	Traitement = True
    	With New FileSystemObject
    		For Each Fichier In .GetFolder(Chemin).Files
    			If UCase(Fichier.Name) Like UCase(NomFic & ".*") Then
    				fic = Fichier.Name
    				Fichier.Delete
    				App.LogEvent mNom & " - itération n°" & iter & ", fichier " & fic, vbLogEventTypeInformation
    				Exit For
    			End If
    		Next Fichier
    	End With
     
    	If fic <> NomFic & ".FIN" Then
    		Traitement = True
    	Else
    		App.LogEvent mNom & " - FIN DEMANDEE (iter=" & iter & ")", vbLogEventTypeInformation
    		Traitement = False
    	End If
    	Exit Function
     
    Traitement_Error:
    	Dim s As String
    	s = " Ligne n°" & Erl & " , Erreur n°" & Err.Number & " : " & Err.Description
    	App.LogEvent s, vbLogEventTypeError
    	Traitement = False
    End Function
    Par contre, suivant le compte utilisé, le service avait ou non accès au répertoire réseau ou il devait chercher le fichier (je ne me souviens plus si le nom était en UNC ou pas).
    Network Service, LocalSystem, Utilisateur du domaine : OK
    LocalService : pas OK

    Bon courage

Discussions similaires

  1. appel des fonctions d'un Service windows en C#
    Par samwac dans le forum Windows Communication Foundation
    Réponses: 13
    Dernier message: 05/02/2009, 15h03
  2. [WD7.5] Service Windows
    Par cqfd dans le forum WinDev
    Réponses: 1
    Dernier message: 29/03/2005, 08h58
  3. fonction de l'API windows
    Par T-B dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 09/03/2005, 22h36
  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