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

API, COM et SDKs Delphi Discussion :

[D XE7] Pourquoi FileExists ou TSearchRec ne voient pas des fichiers ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut [D XE7] Pourquoi FileExists ou TSearchRec ne voient pas des fichiers ?
    Pourquoi un FileExists ou un TSearchRec ne voient pas le fichier (C:\Windows\System32\gpsvc.dll) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FileExists('C:\windows\system32\gpsvc.dll') then
    Pourtant, je le vois bien dans l'explorateur, et ce n'est même pas un fichier caché.
    Même chose pour les fichiers (C:\windows\system32\drivers\ndis.sys), (C:\windows\system32\microsoft-windows-kernel-power-events.dll), et sûrement d'autres.

    Je suis en train d'essayer de récupérer les infos du journal windows avec ReadEventLog, et la source et le "EventID" retournés, donnent le nom d'un fichier à redonner à FormatMessage().
    Sauf que LoadLibrary se plaint que ces fichiers n'existent pas.
    Et quand FileExists me dit la même chose, je me dis que quelque chose m'échappe.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 206
    Points
    206
    Par défaut
    Bonjour Lung

    c'est une DLL présente en 64bit
    Donc si tu compile en 64bits tu trouveras la DLL en 32 tu ne la trouveras pas
    après je ne sais pas si c'est normale

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    C:\Windows\System32\ c'est en fait Win64
    la version Win32 c'est dans C:\Windows\SysWOW64

    Et dans un Exe 32 bits, C:\Windows\SysWOW64 est mappé comme étant C:\Windows\System32\ comme pour la base de registre
    Cela se substitue
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    j'ai eu ça y'a quelques jours (le fileexists qui trouvait pas un fichier alors qu'il etait présent), ça venait du fait que dans l'explorateur windows y'avait l'option "masquer les extensions des fichiers dont le type est connu"
    dans ta fenetre windows, tu vois bien gpsvc.dll ou juste gpsvc ?


    Citation Envoyé par Lung Voir le message
    Pourquoi un FileExists ou un TSearchRec ne voient pas le fichier (C:\Windows\System32\gpsvc.dll) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FileExists('C:\windows\system32\gpsvc.dll') then
    Pourtant, je le vois bien dans l'explorateur, et ce n'est même pas un fichier caché.
    Même chose pour les fichiers (C:\windows\system32\drivers\ndis.sys), (C:\windows\system32\microsoft-windows-kernel-power-events.dll), et sûrement d'autres.

    Je suis en train d'essayer de récupérer les infos du journal windows avec ReadEventLog, et la source et le "EventID" retournés, donnent le nom d'un fichier à redonner à FormatMessage().
    Sauf que LoadLibrary se plaint que ces fichiers n'existent pas.
    Et quand FileExists me dit la même chose, je me dis que quelque chose m'échappe.

  5. #5
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    les réglages de l'explorateur Windows ne devraient pas avoir d'impact sur autre chose que l'explorateur Windows

    si le fichier existe, TFile.Exists() ou FileExists() devraient le trouver (à condition qu'il n'y ait pas un problème de droit d'accès et de nécessité d'élévation de privilèges)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par pprem Voir le message
    les réglages de l'explorateur Windows ne devraient pas avoir d'impact sur autre chose que l'explorateur Windows

    si le fichier existe, TFile.Exists() ou FileExists() devraient le trouver (à condition qu'il n'y ait pas un problème de droit d'accès et de nécessité d'élévation de privilèges)

    oui je suis d'accord, il le trouve sauf parfois.. par exemple , la semaine derniere je faisais un fileexists d'un fichier .wav pour l'executer s'il etait présent, ca marchait sur mon poste mais pas sur le poste ou je devais l'executer, alors que j'avais le chemin sous les yeux, en decochant l'option dans l'explorateur, ca remarchait.... (j'avais deja eu ça y'a qq années, pour ça que je suis allé voir la dedans), j'ai jamais trouvé le pourquoi du comment ...

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    j'ai un vague souvenir de cette affirmation improbable qui s'était avérée juste...mais comme "afficher les extensions" est une des premières choses que je fais après avoir installé Windows je ne l'avais pas remarqué
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    J'espère que le "afficher les extensions" n'a pas vraiment un impact, depuis 20 ans, je serais surpris que mes programmes fonctionnent sur les postes utilisateurs lambda où il n'y a pas les extensions affichées et où j'ai du FileExists sur un tas de fichier différent (.DLL, .EXE, .XLS, .INI ...) mais aussi des FindFirst

    j'ai déjà vu des fichiers qui s'appelait .txt.txt par exemple à cause de ça, la méprise de l'extension cachée et doublée

    Ou alors cela n'a d'effet que sur les dossiers systèmes comme Programs ou System32 (ouais non je n'y crois pas, je mise sur l'émulation plutôt: Redirecteur du système de fichiers)

    Pour gpsvc.dll
    Présente dans C:\Windows\System32
    Absente dans C:\Windows\SysWOW64
    Les deux contiennent cependant gpsvc.dll.mui et ext-ms-win-gpsvc-grouppolicy-l1-1-0.dll


    Chemin d’accès d’origine Chemin d’accès redirigé pour les processus x86 32 bits Chemin d’accès redirigé pour les processus ARM 32 bits
    %windir%\System32 %windir%\SysWOW64 %windir%\SysArm32
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    j'ai un vague souvenir de cette affirmation improbable qui s'était avérée juste...mais comme "afficher les extensions" est une des premières choses que je fais après avoir installé Windows je ne l'avais pas remarqué
    Non mais Microsoft n'oserait pas quand même, si ?

    Filtrer les API (ou en fournir) qui se basent sur ce que voit leur logiciel plutôt que ce qui est stocké sur les disques durs... Si ?

    Du coup ça fait un test de plus à faire ici car pareil, j'affiche dossiers masqués et extensions dès que possible histoire de voir mes fichiers ".machin" de dépôts web et autres.

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    j'ai cherché un peu mais je n'ai pas retrouvé l'échange...du coup ça reste un vague souvenir je peux me tromper
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut
    Citation Envoyé par fbalien Voir le message
    c'est une DLL présente en 64bit
    Donc si tu compile en 64bits tu trouveras la DLL en 32 tu ne la trouveras pas
    après je ne sais pas si c'est normale
    Effectivement, c'était bien ça : le FileExiste fonctionne. Je n'y avais pas pensé.
    Par habitude, je compile toujours en 32.

    Citation Envoyé par exyacc Voir le message
    ça venait du fait que dans l'explorateur windows y'avait l'option "masquer les extensions des fichiers dont le type est connu"
    Je ne masque jamais les extensions.
    Je n'ai jamais compris l'intérêt. C'est juste une gêne.

    Citation Envoyé par ShaiLeTroll Voir le message
    Pour gpsvc.dll
    Présente dans C:\Windows\System32
    Absente dans C:\Windows\SysWOW64
    Les fichiers que je cherche ne semblent n'exister QUE dans System32 et pas dans SysWOW64.


    Par contre, en 64 bits, les points d'arrêts ne fonctionnent plus.
    J'ai beau reconstruire, pas moyen.
    Il y a encore une subtilité qui m'échappe ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  12. #12
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 206
    Points
    206
    Par défaut
    en 64 bits, les points d'arrêts ne fonctionnent plus
    ton répertoire ou ce trouve ton projet ou tes unités contient il des caractères spéciaux tel que "ç"
    En 64bits les point d'arrêt ne marche pas dans ce cas y a déjà un case ouvert pour çà mais çà ne bouge pas trop

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Faut générer les fichiers DCU, MAP ... dans des répertoires différents entre 32 et 64.
    faire un CONSTRUIRE au lieu de compiler, cela peut aider

    Voir aussi que les options de débogage dans le projet sont correctes, sans aller jusqu'à l'extrême des DCU de débogage, vérifier que le Fichier MAP est complet, symbole et tout.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/05/2016, 23h10
  2. Réponses: 14
    Dernier message: 15/12/2015, 21h54
  3. Réponses: 0
    Dernier message: 05/08/2009, 04h51

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