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

Turpitudes de Windows 7


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Par défaut Turpitudes de Windows 7
    Bonjour,
    Il y a quelque temps j'avais posé une question concernant la création de fichiers par programme sous un répertoire système par exemple Program Files (x86) car je m'étonnais que le fichier ne se crée pas à l'endroit désiré mais quelque part sous c:\utilisateur\.....\Program Files (x86). On m'avait expliqué que c'était à cause de la virtualisation et qu'il suffisait de lancer le même programme en mode administrateur pour que les fichiers soient créés à l'endroit souhaité.
    J'ai pris bonne note et c'est ce que j'ai fait, mais voilà ce qui se passe:
    Je lance le programme en mode administrateur et effectivement les fichiers sont créés aux endroits souhaités. Mais en fait le programme ne fait pas que ça, il accède aussi aux registres de Windows (HKEY_LOCAL_MACHINE) pour s'y inscrire et être automatiquement relancé lui même au redémarrage du système et ça ça marche aussi j'accède bien et j'écris bien dans les registres puisque je suis en mode administrateur. Et à la relance du système je constate ce qui marche encore que mon programme a bien été relancé puisqu'il se trouve dans le gestionnaire.
    Mais on y arrive, ce même programme qui est lancé au démarrage du système par la clé HKEY_LOCAL_MACHINE a oublié que son lancement manuel initial avait été fait en mode administrateur et au lieu de continuer à écrire ou consulter les fichiers à l'endroit où il les a initialement créés va les écrire et les consulter à l'adresse virtuelle c:\utilisateurs\....
    Y aurait-il un moyen simple de conserver les droits du mode administrateur lorsqu'on les a déjà eus.
    Merci

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par Athur Voir le message
    Y aurait-il un moyen simple de conserver les droits du mode administrateur lorsqu'on les a déjà eus.
    Tu les conserves tant que l'application est lancée. Après, pour les demander à chaque fois, il faut regarder du côté du fichier des fichiers Manifest.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Par défaut Suite
    Merci pour la réponse,
    Ca j'avais constaté que les droits été conservés tant que le l'application était active. Par contre quand l'utilisateur arrête son micro et le relance un peu plus tard, ça n'est plus l'utilisateur qui relance l'appli (plus question de faire clic droit...) c'est directement Windows, ce qui équivaut à une relance simple (donc sans clic droit...). Il faut donc que j'aille voir côté fichier Manifeste, mais je ne vois pas, a priori, comment se compile un programme avec un fichier manifeste.
    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Par défaut Manifest
    Re-bonjour
    En regardant le site de msn et quelques questions déjà posées, j'ai fait ceci:
    Création du fichier manifest.xml ci-dessous:
    //*******************************************************
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
     <assemblyIdentity version="1.1.1.1" processorArchitecture="X86" 
    name="mxj.exe" type="win32" />
     <description>elevate execution level</description>
     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
     <security>
      <requestedPrivileges>
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
      </requestedPrivileges>
     </security>
     </trustInfo>
    </assembly>
    //********************************************************
    Création d'un fichier manifest.rc ci-dessous:
    //********************************************************
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <windows.h>
    #ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
        #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
    #endif
    #ifndef RT_MANIFEST
        #define RT_MANIFEST 24
    #endif
    CREATEPROCESS_MANIFEST_RESOURCE_ID  RT_MANIFEST "manifest.xml"
    //**********************************************************
    Compilé mon appli mxj.cpp avec Borland bcc32.exe
    Compilé mon appli manifest.rc avec Borland brc32.exe
    Linké mxj.obj et manifest.res avec Borland ilink32.exe
    Aucune erreur de compile, aucune erreur de linkage.
    J'ai ensuite lancé mon appli mxj.exe, elle s'exécute normalement sans aucune différence avec avant, faut dire que je suis sous Windows XP version familiale et que
    je n'ai pas besoin de privilèges car je n'ai pas de virtualisation et j'avais déjà accès sans protection particulière aux registres. Je vérifiais seulement que mon
    appli avec maintenant le fichier manifest intégré marchait toujours.
    Maintenant deux questions:
    1.- Mon fichier manifest est-il correct, car comme je n'ai fait que recopier à droite à gauche je n'ai aucune idée si ma syntaxe est correcte et si elle sera efficace ?
    (je n'ai par exemple aucune idée de la validité des références placées derrière les deux paramètres xmlns ou version)
    2.- Si j'exporte mon mxj.exe sur un ordi en windows 7 est-ce qu'il fonctionnera avec le privilège administrateur par simple lancement par double-clic (pas de clic droit) et
    sans avoir besoin de le recompiler sur cet ordi en windows 7 ? (pour info mon appli mxj.exe fonctionnait déjà sous windows 7 avant d'intégrer le fichier manifest mais à condition de le lancer par clic droit et privilèges administrateur).
    Merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Par défaut Suite
    Pas de réponse, mon fichier manifest est peut-être correct, ainsi que ma façon de le compiler avec le .rc. Mais il y a quand même un truc qui ne me paraît pas clair dans cette façon de procéder:
    J'ai bien une référence au fichier manifest dans le .rc:
    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "manifest.xml"
    (1 24 "manifest.xml")
    Je linke ensuite le .res (issu du .rc) avec le .obj (issu du .cpp) tout se passe bien, mais dans le .cpp je ne fais jamais référence au .rc. J'ai bien vérifié que le contenu du fichier manifest se trouve dans mon .exe, mais je ne vois pas comment le .exe s'y retrouve, comment est-il au courant qu'il dispose d'un fichier manifest dans son propre code (vu que dans le .cpp il n'y a pas de référence sur le .rc)?
    Ne faut-il pas rajouter quelque chose dans le .cpp ?
    Merci.

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Je ne pense pas que le cpp ait besoin d'une référence au manifest, ce n'est pas une ressource qu'il utilise directement.

    C'est en fait une ressource qui est utiliser par le système d'exploitation au chargement de l’exécutable. Le compilateur doit faire normalement le nécessaire pour que Windows soit capable de trouver le manifest dans l’exécutable.

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

Discussions similaires

  1. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 15h14
  2. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  3. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  4. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 10h59

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