Personnalisation du fichier manifeste d'une application Windows
Remonter à Types d'applications multi-périphériques que vous pouvez créer
Remonter à Déploiement des applications - Présentation
Lorsque vous construisez un projet pour la plate-forme cible Windows, RAD Studio inclut automatiquement un fichier manifeste d'application.
Vous pouvez utiliser le fichier manifeste d'application par défaut comme base pour votre fichier manifeste personnalisé d'application :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <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="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
Le fichier manifeste d'application par défaut définit :
- La prise en charge relative à la version des contrôles communs Windows (Windows Common Controls)
- Le niveau d'élévation de l'application qui correspond au processus parent.
Sommaire
Création du fichier manifeste personnalisé d'une application
- Créez un fichier texte vide.
- Copiez-y le fichier manifeste d'application par défaut.
- Ajoutez ou modifiez les dépendances (comme le niveau d'élévation requis ou la prise en charge DPI).
- Enregistrez le fichier texte avec l'extension
.manifest
.
Déclaration du niveau d'élévation requis
Le fichier manifeste d'application par défaut déclare le niveau d'élévation requis sous la forme asInvoker
. Cela signifie que votre application aura le même niveau d'élévation que son processus parent.
Si vous voulez élever votre application au niveau de privilège Administrateur Windows, changez simplement la valeur de l'attribut level
dans la balise requestedExecutionLevel
de asInvoker en requireAdministrator.
- Remarque : L'utilisateur aura encore besoin de privilèges ou d'informations d'identification administrateur pour exécuter l'application avec un niveau de privilège Administrateur.
Le tableau suivant fournit des informations sur le comportement de l'application dans des scénarios courants en rapport avec le niveau d'élévation requis que vous déclarez dans le fichier manifeste de l'application et le niveau du processus parent de l'application :
Niveau déclaré dans le fichier manifeste de l'application | Niveau du processus parent | Comportement |
---|---|---|
asInvoker | Utilisateur standard | L'application démarre en tant qu'utilisateur standard |
asInvoker | Administrateur | L'application démarre avec un accès administratif complet |
highestAvailable | Utilisateur standard | L'application démarre en tant qu'utilisateur standard |
highestAvailable | Administrateur | L'application démarre avec un accès administratif complet |
requireAdministrator | Utilisateur standard | Demande les informations d'identification administrateur avant d'exécuter l'application |
requireAdministrator | Administrateur | L'application démarre avec un accès administratif complet |
Pour des informations plus détaillées sur le comportement des applications selon différents paramètres, voir MSDN: Create and Embed an Application Manifest (UAC) (EN)
Déclaration de la prise en charge DPI
Pour créer une application de prise en charge DPI, vous devez déclarer la prise en charge DPI dans le fichier manifeste de l'application. Par exemple, pour déclarer que votre application assure la prise en charge DPI par moniteur, ajoutez ce qui suit avant la balise </assembly>
de fermeture :
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>True/PM</dpiAware> </asmv3:windowsSettings> </asmv3:application>
Pour des informations plus détaillées, des exemples d'application et des extraits de code relatifs à la prise en charge DPI, voir le document Delphi Developers Guide 4K.pdf (EN).
Ajout du fichier manifeste de l'application à votre application
- Allez dans Projet > Options > Application pour ouvrir la page Options d'applications page.
- Choisissez la paire plate-forme-configuration cible.
- Sélectionnez Personnalisé dans la boîte à options déroulante Générer automatiquement.
- Cliquez sur le bouton ellipse [...] du champ Manifeste personnalisé afin de rechercher votre ficher
.manifest
.
- Remarque : Les options d'applications sont spécifiques à chaque paire plate-forme/configuration. Vous devez définir explicitement le manifeste personnalisé pour chaque paire plate-forme/configuration (il peut s'agir du même fichier
.manifest
).
Dépannage
Test des privilèges d'administration
L'extrait de code suivant peut vous servir de test rapide pour vérifier si votre application requiert les privilèges de niveau Administrateur (et si ceux-ci lui sont correctement attribués). Déclarez le niveau d'élévation requis de votre application sous la forme requireAdministrator
et exécutez la procédure suivante :
uses
System.Win.Registry, Winapi.Windows;
procedure isAdmin();
var
reg: TRegistry;
openResult: Boolean;
begin
reg := TRegistry.Create(KEY_READ);
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.Access := KEY_WRITE;
openResult := reg.OpenKey('Software\MyCompanyName\MyApplication\',True);
if not openResult = True then
begin
MessageDlg('Unable to write to registry. Your application does NOT have Administrator level privileges.',
TMsgDlgType.mtError, mbOKCancel, 0);
end
else
begin
MessageDlg('Write to registry permitted. Your application has Administrator level privileges.',
TMsgDlgType.mtInformation, mbOKCancel, 0);
end;
reg.CloseKey();
reg.Free;
end;
#include <System.Win.Registry.hpp>
#include <Winapi.Windows.hpp>
void __fastcall isAdmin(TObject *Sender){
TRegistry *reg;
bool openResult;
reg = new TRegistry(KEY_READ);
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->Access = KEY_WRITE;
openResult = reg->OpenKey("Software\\MyCompanyName\\MyApplication\\" , true);
if (openResult != true){
MessageDlg("Unable to write to registry. Your application does NOT have Administrator level privileges.",
TMsgDlgType::mtError, mbOKCancel, 0);
}else{
MessageDlg("Write to registry permitted. Your application has Administrator level privileges.",
TMsgDlgType::mtInformation, mbOKCancel, 0);
}
reg->CloseKey();
reg->Free;
}
L'application affiche l'un des messages suivants :
Unable to write to registry. Your application does NOT have Administrator level privileges.
Write to registry permitted. Your application has Administrator level privileges.
Ce test fonctionne parce que vous avez besoin de privilèges de niveau Administrateur pour écrire dans la partie HKEY_LOCAL_MACHINE\Software
du registre. En fait, l'extrait n'écrit rien dans le registre, il demande simplement la permission d'écriture.
Vous devez construire votre application puis l'exécuter en dehors de l'EDI, car l'EDI va la déboguer avec des privilèges de niveau Administrateur par défaut (sans tenir compte du fichier manifeste de l'application).
Erreurs
Impossible de créer le processus : L'application n'a pas pu démarrer car sa configuration côte à côte est incorrecte. Consultez le journal d'événements de l'application ou utilisez l'outil de ligne de commande sxstrace.exe pour plus de détails.
- Cette erreur signifie généralement que vous avez entré une valeur incorrecte quelque part dans le fichier manifeste de l'application. Vérifiez que le fichier manifeste est correctement formaté et que toutes les valeurs fournies sont correctes.
- Remarque : Construisez votre application après avoir changé le fichier manifeste de l'application pour appliquer les changements.
Impossible de créer le processus. L'opération demandée requiert une élévation
- Cette erreur s'affiche si vous exécutez l'EDI en tant qu'utilisateur standard et que vous tentez de déboguer une application qui requiert des privilèges de niveau Administrateur. La seule manière de déboguer une application qui requiert des privilèges de niveau Administrateur consiste à exécuter l'EDI en tant qu'Administrateur.
Voir aussi
- Delphi Developers Guide 4K.pdf (EN) (Résolution des problèmes DPI, création d'un fichier manifeste personnalisé.)