1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2014
    Messages : 18
    Points : 10
    Points
    10

    Par défaut Nom du répertoire de stockage du script

    Bonjour,

    Dans un script vbs, je ne souhaite pas mettre le répertoire de stockage en dur, mais je récupère sa valeur avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objDskPath = objShell.SpecialFolders("Desktop")
    strRepMoteur = objFSO.GetParentFolderName(WScript.ScriptFullName)
    Après compilation du script, l'exécutable correspondant se lance dans un répertoire de travail temporaire et c'est cette valeur que je récupère au lieu du répertoire dans lequel se trouve le fichier.

    Est-ce qu'il est possible de contourner ce problème et comment ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 005
    Points : 4 559
    Points
    4 559

    Par défaut

    On pourrait envisager d'utiliser le registre Windows pour y parvenir à condition d'avoir les droits nécessaires pour le modifier :
    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
    Option Explicit
     
    Dim WSHShell, fso, RegPath, FirstCall
    RegPath = "HKCU\Volatile Environment\ProgPath"
    FirstCall = "HKCU\Volatile Environment\TimeStamp"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set WSHShell = CreateObject("Wscript.Shell")
    On Error Resume Next ' Supprime l'erreur : Impossible d'ouvrir la clé.... pour la lecture.
    With WSHShell
       If .RegRead(FirstCall) = "" Then ' si la date de 1ère exécution n'existe pas :
          .RegWrite RegPath, fso.GetParentFolderName(Wscript.ScriptFullName) ' On inscrit chemin de l'exe(ou du Script)
          .RegWrite FirstCall, Now ' On inscrit la date de 1ère exécution dans le registre.
        End If
      MsgBox .RegRead(RegPath) ' Retour du chemin de l'exe
    End With
    Une fois le script lancé à partir d'un emplacement donné(1ère exécution), c'est cet emplacement qui sera toujours évoqué tant que la valeur HKCU\Volatile Environment\TimeStamp reste une chaîne non vide et ce quel que soit le nouveau dossier de lancement du Script.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre chevronné

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, AMP)
    Inscrit en
    juillet 2014
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, AMP)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 1 100
    Points : 2 049
    Points
    2 049

    Par défaut

    Qu’utilise tu pour passer de vbs à exe.
    Si le compilateur est fait correctement, il devrait y avoir un moyen prévu de récupérer le chemin d'origine.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2014
    Messages : 18
    Points : 10
    Points
    10

    Par défaut

    Merci pour ces réponses.

    1- la solution de modifier la clé de registre est intéressante, mais pas possible (les droits "administrateur" sont bridés)
    2- compilateur = vbs_to_exe ; j'avais bien pensé à vérifier le paramétrage, mais le logiciel ne permet pas de gérer cette variable

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 005
    Points : 4 559
    Points
    4 559

    Par défaut

    1- la solution de modifier la clé de registre est intéressante, mais pas possible (les droits "administrateur" sont bridés)
    On peut dans ce cas créer un fichier dans un dossier à choisir pour y écrire les infos au lieu de les mettre dans le registre :
    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
    Option Explicit
     
        Const ForReading = 1, ForWriting = 2, FileDest = "C:\Temp\Temoin.txt" ' exemple de chemin
        Dim fso, f
     
        Set fso = CreateObject("Scripting.FileSystemObject")
        If Not fso.FileExists(FileDest) Then 
           Set f = fso.OpenTextFile(FileDest, ForWriting, True)
           f.Write fso.GetParentFolderName(WScript.ScriptFullName)
           f.Close
           Set f = fso.OpenTextFile(FileDest, ForReading, False)
           MsgBox f.ReadAll
           f.Close
        Else
           Set f = fso.OpenTextFile(FileDest, ForReading, False)
           MsgBox f.ReadAll
           f.Close
        End If
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA)
    Vous pouvez consulter mes contributions
    Consultez les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2014
    Messages : 18
    Points : 10
    Points
    10

    Par défaut

    Après réflexion (et vérification), la solution proposée ne résout pas mon problème.
    C'est la commande "objFSO.GetParentFolderName(WScript.ScriptFullName)" qui ne renvoie pas le résultat que j'attends. Si mon exe est stocké dans le répertoire "C:\Scripts", la commande ne renverra pas "C:\Scripts" mais le nom d'un répertoire temporaire d'exécution, du type "C:\User\Temp ..."

  7. #7
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 135
    Points : 8 311
    Points
    8 311

    Par défaut

    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    MsgBox ChemSource(replace(WScript.ScriptFullName,WScript.ScriptName,""), WScript.ScriptName)
     
    Function ChemSource(Chem, Fich)
    Dim objShell, objFolder, strFileName
    Dim Msg
     
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.NameSpace(Chem) 'branchement sur le dossier
    Set strFileName = objFolder.Items.Item(Fich) 'branchement sur le fichier
     
    ChemSource = Trim(objFolder.GetDetailsOf(strFileName, 177))
     
    Set strFileName = Nothing: Set objFolder = Nothing: Set objShell = Nothing
    End Function
    Si le script n'est pas dans le dossier temporaire mais dans le dossier de travail, que donne ce script une fois compilé avec vbs_to_exe?
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2014
    Messages : 18
    Points : 10
    Points
    10

    Par défaut

    Bonjour,

    Le comportement est le même.
    Apparemment, le script se décompile dans le répertoire temporaire qui devient donc son répertoire "source".

  9. #9
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 112
    Points : 2 962
    Points
    2 962

    Par défaut

    bonjour,

    ton convertisseur c'est celui-ci ?
    et sinon, ton .exe accepte-t-il des paramètres en ligne de commande ?
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  10. #10
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 112
    Points : 2 962
    Points
    2 962

    Par défaut

    s'il s'agit bien du convertisseur visé par mon message précédent
    la réponse est dans la doc....... RTFM

    extrait :
    Environment variables


    These environment variables are automatically set at the start of your converted program

    v2eincfile(number) Returns, if available, the include filename
    v2eincfilecount Returns the number of files included
    v2eincfilepath Returns the include file path
    v2eprogramname Returns the full path name of your executable
    v2eprogramfilename Returns the file name of your executable
    v2eprogrampathname Returns the directory name of your executable
    v2eprogramshortname Returns the short DOS (8.3) path name of your executable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WshShell = WScript.CreateObject("WScript.Shell")
    wscript.Echo WshShell.ExpandEnvironmentStrings("%v2eprogrampathname%")
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  11. #11
    Membre chevronné

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, AMP)
    Inscrit en
    juillet 2014
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, AMP)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 1 100
    Points : 2 049
    Points
    2 049

    Par défaut

    Qu’utilise tu pour passer de vbs à exe.
    Si le compilateur est fait correctement, il devrait y avoir un moyen prévu de récupérer le chemin d'origine.
    J'attends toujours la réponse à ma question du 31/10/2017.

    Chercher sans savoir est une perte de temps, mais tu apporte déjà des réponses omen999

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2014
    Messages : 18
    Points : 10
    Points
    10

    Par défaut

    Désolé, j'avais zappé le message du 31/10.

    Ta solution est la bonne en effet ; avec la doc, ça facilite les choses, mais je n'avais pas trouvé la doc dont tu parles (et ne l'ai toujours pas trouvée).
    Merci beaucoup.

  13. #13
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 112
    Points : 2 962
    Points
    2 962

    Par défaut

    mais je n'avais pas trouvé la doc dont tu parles (et ne l'ai toujours pas trouvée).
    dans le pack Vbs_To_Exe.zip téléchargé hier sur le site, je trouve pourtant bien un fichier help.chm...

    Chercher sans savoir est une perte de temps
    11 ans de forum m'ont appris que même fournir une bonne réponse n'assure pas la résolution du problème
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2014
    Messages : 18
    Points : 10
    Points
    10

    Par défaut

    Oups ...

    Merci pour le temps que tu y as consacré (et que je t'ai fait perdre)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Possiblité d'utiliser des noms de répertoires
    Par vicelard dans le forum Access
    Réponses: 4
    Dernier message: 27/10/2005, 12h04
  2. Lire le nom du répertoire courant !
    Par Feustine dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2005, 15h33
  3. nom de répertoire contenant des accents
    Par isa38 dans le forum Windows
    Réponses: 6
    Dernier message: 21/07/2005, 11h27
  4. Réponses: 2
    Dernier message: 08/07/2005, 11h40
  5. passage nom des contraintes de MPD au script de création BD
    Par marièmdiaw dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 14/01/2005, 14h18

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