Nous sommes le Ven 29 Mars, 2024 13:53
Supprimer les cookies

[Résolu] Je suis MS-compatible ! Ruby Rules !

Tout ce qui est un peu hors-sujet mais qui peut se partager...

Jeu 13 Déc, 2012 22:29

Bonsoir,

je n'ai pas de système Microsoft pour chercher les réponses moi-même.

Un utilisateur d'un de mes logiciels remarque un erreur quand une routine cherche un logiciel externe en analysant la variable 'PATH'. Il semble que le répertoire racine 'C:/' est référencé dans 'PATH', mais mon logiciel constat que 'C' n'existe pas.

Indépendamment du fait que nous ne pouvons pas vérifier l'état du système affecté, j'ai quelques difficultés avec la description du problème:

    Est-ce que c'est utile d'avoir 'C' dans le chemin des fichiers exécutables ?
    Quelle est la règle qui me permettrais de reconnaitre les répertoires racines sous Windows ? Je devine que «1 lettre» n'est plus actuel aujourd'hui.
    Est-ce qu'il y a une autre raison pour l'incapacité d'un logiciel de trouver un répertoire racine, qui est référencé dans 'PATH' ?

J'ai demandé de vérifier que la variable de l'environnement n'est pas obsolète et "C" a entretemps été remplacé par un autre nom ... Mais en vérité je n'en sais rien.
Dernière édition par versleouest le Lun 17 Déc, 2012 11:17, édité 2 fois au total.
«La joie naît de se sentir en harmonie avec la symphonie universelle. Nous sommes d’abord des êtres humains, et je ne veux pas que l’on m’appelle consommateur !» (Pierre Rabhi, Novembre 2010)
versleouest

Avatar de l’utilisateur
Messages : 117
Géo : France, Basse-Normandie, Canton Carrouge

Ven 14 Déc, 2012 11:10

Il me semble que les lettres sont toujours d'actualité, du moins jusqu'à Win 7, pour Win 8, je ne sais pas.
Sous Win XP du moins j'ai les variables d'environnement qui peuvent aider :
Il s'agit du mode console, c'est peut-être différent en mode graphique ; en dehors du PATH on a donc :

SystemDrive=C:
SystemRoot=C:\Windows
windir=C:\Windows

tu as aussi :
ProgramFiles=C:\Program Files

Ainsi que la variable
OS=Windows_NT

Je ne sais pas si ça peut aider, d'autre part, ça va varier avec Win Vista, 7 et 8
lanpower

Messages : 121

Ven 14 Déc, 2012 11:47

Merci lanpower.

Oui ça aide parce que tes infos m'ouvrent d'autres possibilités. Pour mon problème immédiat, j'ai décidé que le PATH peut contenir n'importe quoi et il faut préparer mon logiciel pour cette possibilité. J'ignore alors les répertoires qui ne sont pas lisibles ou n'existent pas... C'est la solution évidente, je crois, mais le rôle du répertoire "/" (root) sous Linux m'a probablement influencé et «obscurci» ma vu.
«La joie naît de se sentir en harmonie avec la symphonie universelle. Nous sommes d’abord des êtres humains, et je ne veux pas que l’on m’appelle consommateur !» (Pierre Rabhi, Novembre 2010)
versleouest

Avatar de l’utilisateur
Messages : 117
Géo : France, Basse-Normandie, Canton Carrouge

Ven 14 Déc, 2012 13:50

Je n'avais pas vu, (il fallait remonter la page), il y a aussi d'utile pour ton cas je pense :

HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\nom de lutilisateur
CommonProgramFiles=C:\Program Files\Fichiers communs

Il y a aussi
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\nom de lutilisateur\Application Data
USERPROFILE=C:\Documents and Settings\nom de lutilisateur

Voilà si ça peut servir (commande set en console)
lanpower

Messages : 121

Sam 15 Déc, 2012 18:40

Malheureusement, mon problème n'est pas solutionné, car après mes «quick-fixes» et sous Windows, mon logiciel n'est encore pas capable de séparer correctement les répertoires du «PATH». Ils sont bizarrement regroupés et pendant que le séparateur ';' (point-virgule, colon sous Linux) semble respecté, l'identifiant du disque dur manque. C'est à dire, que le logiciel cherche des fichiers dans un répertoire «\folder\truc\».

J'ai écris un court script pour tester uniquement le traitement de la variable PATH et voudrais que quelqu'un qui a accès a un interpréteur Ruby sous Windows teste que le script fonctionne et affiche les répertoires correctement.
Le résultat devrait ressembler à ça:
Code: Tout sélectionner
I, [2012-12-15T18:37:07.529510 #4381]  INFO -- : C:\Ruby193\bin, c:\;c:\windows\system32, c:\program files, c:\program files (x86)


La ligne de commande pour l'exécution du script est quelque chose comme:
Code: Tout sélectionner
C:\> ruby path_test.rb


Le script (à sauvegarder sous un nom comme path_test.rb):
Code: Tout sélectionner
#encoding: UTF-8

# This script shall verify that the Windows PATH can
# be read and its values be split using Ruby
require "logger"

$LOG = Logger.new(STDOUT)
# set log-level or disable logging
$LOG.level = Logger::INFO

def test_path
   pathdirs = ENV['PATH'].split(File::PATH_SEPARATOR).collect do |d|
      # BUGFIX: PATH may contain just anything!
      pdir = nil
      if(Dir.exist?(d) )
         if(File.readable?(d) )
            # create a non nil entry for pathdirs.
            begin
               pdir = Dir.new(d)
            rescue Exception => ex
               # "Trust nobody" (Herod V)
               $LOG.error('Cannot search for executables in ' << d << ': ' << ex.message )
            end
         else
            $LOG.warn('The path-variable references an unreadable directory' << ': ' << d)
         end
      else
         $LOG.warn('The path-variable contains an invalid value' << ': ' << d)
      end
      pdir.path if pdir
   end
   pathdirs.join(', ')
end

if __FILE__ == $0
   $LOG.info( test_path)
end


Merci d'avance.
«La joie naît de se sentir en harmonie avec la symphonie universelle. Nous sommes d’abord des êtres humains, et je ne veux pas que l’on m’appelle consommateur !» (Pierre Rabhi, Novembre 2010)
versleouest

Avatar de l’utilisateur
Messages : 117
Géo : France, Basse-Normandie, Canton Carrouge

Lun 17 Déc, 2012 11:21

J'ai un feedback de la Core-Ruby liste et mes routines sont correctes et fonctionnelles même sous Windows. On ne va pas savoir ce qui a provoqué les erreurs qui étaient indiqués avant mon premier message ci-dessus. Je danse un peu et me réjouis du triomphe.
«La joie naît de se sentir en harmonie avec la symphonie universelle. Nous sommes d’abord des êtres humains, et je ne veux pas que l’on m’appelle consommateur !» (Pierre Rabhi, Novembre 2010)
versleouest

Avatar de l’utilisateur
Messages : 117
Géo : France, Basse-Normandie, Canton Carrouge

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit