Précédent   Forum des professionnels en informatique > Systèmes > Windows > Windows Vista
Windows Vista Forum d'entraide Windows Vista. Lire -> Découvrez Windows Vista, La F.A.Q Windows Vista
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/10/2007, 11h34   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 4
Points : 0
Points : 0
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.
Aquafresh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 15h09   #2
Invité de passage
 
Inscription : octobre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 4
Points : 0
Points : 0
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.
Aquafresh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 18h08   #3
Invité de passage
 
Inscription : octobre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 4
Points : 0
Points : 0
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
Aquafresh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h41.


 
 
 
 
Partenaires

Hébergement Web