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 Vista Discussion :

Erreur script VBS avec les "dossiers virtuels" Vista


Sujet :

Windows Vista

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Erreur script VBS avec les "dossiers virtuels" Vista
    Salut,

    Je rencontre sous Vista des problèmes avec la fonction .Size dans un script VBS :

    '-----
    ' test
    '-----
    Dim fs, fd

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set fd = fs.GetFolder("c:\users\dupont\")
    msgbox fd.size


    J'obtiens un popup d'erreur :

    Script : C:\test\test7.vbs
    Ligne : 8
    Caract. : 1
    Erreur : Permission refusée
    Code : 800A0046
    Source : Erreur d'exécution Microsoft VBScript

    Après plusieurs tests, il apparait que cela ne se produit que lorsqu'il y a des sous-répertoires "virtuels", ces fameux répertoires dits de "jonction" auquels on ne peut cependant pas accéder ("access denied") . Je pense que cela pose un problème à la fonction size lorsqu'elle tente de parcourir l'ensemble des répertoires.

    Quelqu'un a-t-il déjà eu un problème similaire ? Y aurait-il une solution, même de contournement ?

    Merci à vous.
    -
    Aq.

  2. #2
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Point de jonction Vista
    Bon ben après beaucoup de recherches sur le Web, il semblerait bien que les points de jonction de Vista posent problème à certaines fonctions de language telles que "folder.size" en vbs ou vba :

    http://www.dx21.com/HOME/ARTICLES/P2...CLE.ASP?CID=71

    Donc, ben... a priori pas de solution évidente
    --
    Aq.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Résolu]
    Re-salut,

    Bon j'ai finalement résolu mon problème . Je me suis fait un résumé complet que je poste ici au cas où d'autres aient les mêmes problèmes.
    N'hésitez pas à corriger ou compléter si j'ai fait des erreurs ou imprécisions.

    A+

    Aq.

    ========
    Problème
    ========
    Vista introduit la notion de points de jonction. Il s'agit de liens, au niveau "file system", vers d'autres répertoires. On peut ainsi créer des arborescences personnalisées composées de répertoires éparpillés un peu partout. Vista possède par défaut de nombreux points de jonction qui correspondent aux anciens répertoires XP tels que "Mes documents", "Documents and Settings" etc... Ils sont là par simple souci de compatibilité et on ne peut généralement pas y accéder.
    L'ennui c'est que certaines fonctions de language telles que "folder.size" sous vbscript, ne se comportent pas correctement lorsqu'elles rencontrent un point de jonction. "folder.size" génère (à ce jour) une erreur du type "permission refusée" code 800A0046 et mettent fin au script, ce qui ne permet pas de calculer la taille d'un répertoire sous Vista qui contient des points de jonction.
    Autre lien traitant su problème : http://www.dx21.com/HOME/ARTICLES/P2...CLE.ASP?CID=71


    ==========
    Résolution
    ==========
    J'ai récupéré la liste des attributs de répertoire sans trouver d'infos sur l'identification des points de jonctions :

    bit 1 (1): ReadOnly
    bit 2 (2): Hidden
    bit 3 (4): System
    bit 4 (8): Volume
    bit 5 (16): Directory
    bit 6 (32): Archive
    bit 7 (64): Alias
    bit 12 (2048): Compressed file

    Après quelques tests, il s'est avéré que tous mes points de jonction Windows (ex : "Application Data"...) avaient une signature d'attribut de 1046. Par déduction, on trouve 1046 = 1024 + 16 + 4 + 2 ce qui signifie que l'attribut de point de jonction sous Vista est très probablement 1024. On a alors la liste :

    bit 1 (1): ReadOnly
    bit 2 (2): Hidden
    bit 3 (4): System
    bit 4 (8): Volume
    bit 5 (16): Directory
    bit 6 (32): Archive
    bit 7 (64): Alias
    bit 11 (1024): <Junction Point ??>
    bit 12 (2048): Compressed file

    Suite à quoi, il devient possible de réécrire une fonction vbscript qui calcule la taille d'un répertoire Vista en évitant les points de jonction et qui donc ne plante pas :


    '--------------------------------
    ' calcule récursivement la taille
    ' d'un dossier en évitant les
    ' points de jonction vista
    '--------------------------------

    Dim fs, fd

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set fd = fs.GetFolder("c:\Users\dupont")

    msgbox fdSize (fd)


    '-------------------
    ' fonction récursive
    '-------------------
    Function fdSize(Folder)

    fdSize = 0

    For Each Subfolder in Folder.SubFolders
    if (Subfolder.Attributes and 1024) = 0 then
    fdSize = fdSize + fdSize (Subfolder)
    end if
    Next

    For Each f in Folder.files
    fdSize = fdSize + f.size
    Next

    End Function

Discussions similaires

  1. Erreur d'exécution avec les Runtime
    Par denils dans le forum Runtime
    Réponses: 30
    Dernier message: 22/01/2015, 15h21
  2. Executer script VBS avec requette http
    Par kevain_09 dans le forum VBScript
    Réponses: 1
    Dernier message: 30/09/2006, 21h33
  3. pb de script javacript avec les boutons checkbox
    Par myves dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/09/2006, 14h12
  4. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57

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