2011-04-14 2 views
0

Je travaille actuellement sur un projet qui interagit avec un objet COM. Dans mon code, j'appelle ce qui suit:Autorisations utilisateur et objets COM

 

CoInitialize(NULL); //Initialize COM system 
HRESULT hr = spSSCProt.CreateInstance(("SSCProt.SSCprotector")); 
 

Cela devrait me procurer l'objet dont j'ai besoin. Si cela échoue, c'est probablement parce que le serveur COM n'a pas l'objet COM enregistré en utilisant regsvr32. Tout va bien et bien, je le code suivant pour gérer que:

 

/if its not, lets try to register it ourselves...create the command 
CHAR cmdBuf[BUFSIZE]; 
GetCurrentDirectory(BUFSIZE,cmdBuf); 
string cmd("regsvr32 -s \""); 
cmd += cmdBuf; 
cmd += "\\stixDlls\\SSCProt.dll\""; 

//attempt to register it 
system(cmd.c_str()); 
 

Le problème se pose si l'utilisateur n'est pas un administrateur. Ils ne seront pas en mesure d'exécuter la section de code les registres du serveur COM. La plupart de mes utilisateurs ne seront probablement pas des administrateurs.

Toutes les idées sur la façon dont je peux enregistrer le serveur com si elles ne sont pas un administrateur.

Merci

Répondre

0

Si possible, le meilleur endroit pour faire l'enregistrement COM est au cours du processus d'installation, qui est habituellement exécuté sous des privilèges d'administrateur. Si ce n'est pas possible, il existe un autre moyen standard: la plupart des utilisateurs à domicile de Vista et Win7 ont des privilèges d'administrateur - ils ne sont pas activés par défaut. Pour activer ces privilèges, vous devez demander l'élévation à travers le (in) célèbre UAC.

1

Le but de la protection Windows est de vous empêcher de faire ce genre de choses. Comment Windows est-il censé savoir que vous n'êtes pas un virus qui tente d'installer un logiciel malveillant?

Votre seul espoir est de démarrer un autre programme qui demande des privilèges d'administrateur via son manifeste. À ce stade, Windows demandera le mot de passe de l'administrateur.