2011-08-07 1 views
-1

Possible en double:
Delphi: Prompt for UAC elevation when neededDelphi droits d'administrateur D7 W7

Mon application écrite en Delphi 7 pour Windows 7 nécessite des privilèges d'administrateur pour certaines fonctionnalités. Comment puis-je l'élever à l'administrateur du code source?

Je vérifie les droits de l'utilisateur avec ce code:

function IsUserAdmin : boolean; 
const CAdminSia : TSidIdentifierAuthority = (value: (0, 0, 0, 0, 0, 5)); 
var sid : PSid; 
    ctm : function (token: dword; sid: pointer; var isMember: bool) : bool; stdcall; 
    b1 : bool; 
begin 
    result := false; 
    ctm := GetProcAddress(LoadLibrary('advapi32.dll'), 'CheckTokenMembership'); 
    if (@ctm <> nil) and AllocateAndInitializeSid(CAdminSia, 2, $20, $220, 0, 0, 0, 0, 0, 0, sid) then 
    begin 
    result := ctm(0, sid, b1) and b1; 
    FreeSid(sid); 
    end; 
end; 

Si l'application a commencé en tant qu'administrateur, il retourne vrai; sinon, alors faux. Maintenant, si j'ai False comme résultat, je veux automatiquement élever le programme à l'administrateur.

J'ai essayé avec l'élévation manifeste à l'administrateur, mais si je démarre l'application, alors je vois une invite d'UAC et si je réponds "non", l'application ne fonctionnera pas du tout.

Une chance de recevoir de l'aide?

J'ai besoin de droits d'administrateur pour un accès brut au lecteur physique.

EDIT:

J'ai aussi essayé de désactiver l'UAC que pour cette application (ParamStr (0)) également à partir du code (après avoir appuyé sur le bouton "Désactiver l'UAC pour cette application").

+0

Ainsi, seuls les utilisateurs disposant de droits d'administration peuvent utiliser votre application? Ses applications comme ça je travaille avec ma base d'utilisateurs pour éviter comme la peste. Une note supplémentaire sur le contrôle de compte d'utilisateur, si un utilisateur n'a pas la possibilité d'élever via une invite UAC, l'invite doit lui permettre de l'élever avec un nom d'utilisateur et un mot de passe alternatifs. Ce n'est pas un senerio que vous avez expliqué dans votre question. – edusysadmin

+0

> "Ainsi, seuls les utilisateurs disposant de droits d'administration peuvent utiliser votre application?" Non, seulement quelques fonctions dangereuses je vais informer les utilisateurs à ce sujet – wcale

+3

@wcale - Si votre programme pourrait simplement contourner UAC et se faire exécuter dans la portée de l'administrateur, UAC serait assez inutile non? – techie007

Répondre

1

Les processus reçoivent leur jeton au démarrage, puis ne peuvent pas les modifier. Ainsi, si vous voulez qu'une application apparaisse pour un sous-ensemble de ses fonctionnalités, cette fonctionnalité doit impliquer un nouveau processus. Ce que vous ne pouvez pas faire, c'est élever un processus existant.

1

Si vous voulez qu'il ait des droits d'administrateur, alors vous devez passer par UAC. Vous ne pouvez pas passer à l'administrateur sans afficher l'invite UAC, sauf si l'UAC est désactivé. De toute évidence, vous devez choisir OUI à l'invite de l'UAC pour obtenir des privilèges d'administrateur.

+0

Cette application démarre et fonctionne avec les droits standard, sans administrateur. Après avoir appuyé sur le bouton "Afficher/modifier les lecteurs physiques", l'application vérifie si son exécution en tant qu'administrateur. Si ce n'est pas le cas, passez à l'administrateur avec l'avertissement UAC. Comment élever à l'administrateur du code? L'UAC peut afficher un avertissement. – wcale

+0

Cette application de la vôtre, que fait-elle? Cela ressemble à une application intéressante, ce n'est certainement pas une application commerciale standard. Est-ce une sorte d'application utilitaire de disque? – Marthinus

+0

@Marthinus C'est une application de cryptographie – wcale

Questions connexes