2009-10-20 7 views
1

J'utilise Visual C++. Je voudrais vraiment avoir seulement la DLL enregistrée pour l'utilisateur actuel, même si les utilisateurs sont un administrateur.Auto-inscription de la DLL: comment s'inscrire uniquement pour l'utilisateur actuel?

Pour cette raison, j'ai changé toutes les références project.rgs à HKCR. Mais, en utilisant Process Monitor tout en utilisant regsvr32 pour enregistrer la DLL, je remarque qu'il essaie toujours de créer HKCR\TypeLib\{ ... }. Cela se passe sur l'appel à CComModule::RegisterServer().

Est-ce inhérent à CComModule? Y at-il quelque chose qui me manque, en termes de configuration de Visual C++? Je sais que je peux utiliser RegOverridePredefKey, mais je ne veux pas charger plus de DLL, et ce n'est pas une solution très élégante.

Répondre

2

CComModule::RegisterServer() a un premier paramètre BOOL qui indique s'il doit enregistrer la bibliothèque de types. Réglez-le sur FALSE et il n'essaiera pas de le faire.

+0

Le paramètre BOOL dans RegisterServer (..) est si enregistrer le typelib, pas pour contrôler le par utilisateur. –

+0

Oui, exactement. Ce paramètre détermine si le code d'enregistrement du typeplib sera appelé. Le problème de l'OP est qu'après avoir lancé son fichier .rgs dans le registre, le code d'enregistrement de typlib est également invoqué et est lancé dans la clé "HKCR \ TypeLib \ {Quelquechose} – sharptooth

+0

Eh bien, je ne veux pas * ne pas m'inscrire Je veux juste le faire enregistrer dans 'HKCU \ Software \ Classes \ TypeLib' – known

0

HKCR n'est pas mappé à la ruche du registre d'utilisateurs en cours, si vous voulez vraiment enregistrer le serveur pour l'utilisateur local, utilisez HKEY_CURRENT_USER\Software\Classes au lieu de HKCR.