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

Langage Delphi Discussion :

Compiler avec droits administrateur


Sujet :

Langage Delphi

  1. #1
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut Compiler avec droits administrateur
    bonjour,
    (sous Delphi XE2)
    Depuis hier j'essaie de compiler mon application avec des droits admin et je ne m'en sort pas. J'ai un warning à la compilation "duplicate resource: Type 24(user_defined), ID 1;file...Project1.res resource kept; file ...uac.res resource discarded"

    J'ai essayé de nommer le fichier ressource avec le nom du projet et c'est pareil.

    Voilà le contenu de mon fichier Project1.manifest
    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
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="project1" type="*"/>
      <description>elevate execution level</description>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
       <security>
         <requestedPrivileges>
          <requestedExecutionLevel level="requireAdministrator"/>
         </requestedPrivileges>
       </security>
      </trustInfo>
      <dependency>
       <dependentAssembly>
         <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
       </dependentAssembly>
      </dependency>
    </assembly>
    Voilà le contenu de mon fichier Project1.rc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 24 "project1.manifest"
    J'ai ajouté le fichier au projet par le menu Projet/ajouter au projet/project1.RC


    Et voilà le source de mon projet de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    Var
     pdI: PDWORD;
     hOpenKey: HKEY;
    Begin
      pdI := nil;
      if RegCreateKeyEx(HKEY_LOCAL_MACHINE, Pwidechar('SOFTWARE\Microsoft\Install'), 0, nil,
         REG_OPTION_NON_VOLATILE, KEY_WRITE, nil, hOpenKey, pdI) = ERROR_SUCCESS then
      begin
        ShowMessage('ok');
      end else showMessage('fail');
    end;
    Merci de vos conseils
    Franck

  2. #2
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    J'ai trouvé une solution qui fonctionne partiellement si je supprimer la ligne:
    {$R *.res} qui est dans le fichier Project1.dpr, je n'ai plus le warning et mon fichier de ressource n'est plus désactivé.

    Mais dans tous les exemples que je trouve, il n'est pas indiqué de supprimer cette ligne !!!
    Et si je supprime cette ligne, ça a d'autres conséquences lorsque j'applique cette méthode à mon programme en cours de développement.
    Par exemple: j'utilise GetFileVersionInfoSize qui renvoie 0 lorsque j'utilise la ressource issue du manifest au lieu d'une valeur différente de 0, donc mon soft ne marche plus.

    Help me please !
    Pourquoi le compilateur n'accepte pas ma resource lors que la ligne {$R *.res} est présente ????

    Merci !

  3. #3
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Voici la solution qui fonctionne (avec XE2) malgré un warning persistant...

    1) Créer un fichier texte que nous nommerons MonManifest.manifest, situé dans le dossier racine du projet et qui contient ceci:
    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
    19
    20
    21
    22
    23
    24
    25
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity type="win32" name="App" version="3.1.0.0" processorArchitecture="*"/>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
            </requestedPrivileges>
        </security>
      </trustInfo>
      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
          <!--The ID below indicates application support for Windows Vista -->
          <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
          <!--The ID below indicates application support for Windows 7 -->
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        </application>
      </compatibility>
    </assembly>
    2) Créer un autre fichier dans le dossier racine du projet que nous nommerons MonManifest.rc et qui contient la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 24 "MonManifest.manifest"
    3) Créer un fichier MonManifest.bat qui contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    brcc32 MonManifest.rc
    pause
    4) Executer le fichier MonManifest.bat qui doit générer un fichier MonManifest.res

    5) Ouvrir le fichier projet (.dpr) depuis le menu "Projet/Voir le source" et Saisissez la ligne {$R 'MonManifest.res' 'MonManifest.rc'} en dessous de la ligne {$R *.res}

    6) Compiler en mode release, vous devriez avoir un warning que je n'arrive pas à retirer mais ça devrait fonctionner, à l'exécution, si vous n'êtes pas en mode administrateur, vous devriez avoir la fenêtre de sécurité de Windows.

    PS: La méthode consistant à ajouter le fichier .RC au projet ne fonctionne pas. Le fichier .res est bien créé à la compilation, il n'y a pas de warning à la compilation mais le programme ne passe pas en mode administrateur !

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 707
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 707
    Points : 13 167
    Points
    13 167
    Par défaut
    Pour utiliser un manifest personnalisé, il suffit de désactiver les Thèmes d'exécution dans les options du projet

    Depuis XE3, il est possible de directement renseigner ce manifest dans les options sans passer par un fichier de ressource.

  5. #5
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Oui je ne l'ai pas indiqué mais je n'ai pas de thème d'activé.
    Et avec XE2 on est sensé pouvoir ajouter le fichier .RC au projet, mais ça ne fonctionne pas.

  6. #6
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Désolé après vérification je n'avais pas de thème de sélectionné mais j'avais bien le thème d'activé !!!!
    Je n'ai plus de warning maintenant. pourtant j'étais sur de moi....comme quoi..

  7. #7
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    il y a encore plus simple avec XE2:
    Aller dans Projet/options puis dans application sélectionner "utiliser un manifest peronnalisé" Choisir le fichier manifest et compiler, ça marche.

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 707
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 707
    Points : 13 167
    Points
    13 167
    Par défaut
    Donc ce n'est pas depuis XE3, mais XE2

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2015, 17h37
  2. Réponses: 0
    Dernier message: 08/04/2011, 11h56
  3. Utilisation logiciel avec droit d'administrateur
    Par js8bleu dans le forum Windows XP
    Réponses: 2
    Dernier message: 20/09/2010, 01h05
  4. Exécuter avec les droits administrateur
    Par Pandala dans le forum VBScript
    Réponses: 6
    Dernier message: 23/05/2007, 13h58

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