Existe-t-il une version .NET ou Win32 de regsvr32? Je voudrais enregistrer une DLL COM avec du code au lieu de bombarder le programme regsvr32.Existe-t-il une version .NET ou Win32 de regsvr32?
Répondre
La méthode standard d'enregistrement d'un assemblage consiste à appeler la fonction DllRegisterServer
exportée sur l'assemblage.
En termes simplifiés regsvr32 fait essentiellement les éléments suivants (vérification d'erreur omis par souci de concision).
HANDLE lib = LoadLibrary(...);
FARPROC proc = GetProcAddress(lib, "DllRegisterServer");
proc();
Je crois que vous chargez simplement la DLL, puis appelez exporté DllRegisterServer()
fonction.
Oui, cela nécessite simplement d'appeler la fonction exportée. Le diable est dans les détails cependant. La DLL chargera également toutes ses DLL dépendantes implicitement liées. Et leurs entrypoints DllMain() fonctionneront. C'est assez bien dans un processus simple comme regsvr32, pas si bien dans le vôtre qui doit survivre au-delà de l'étape d'enregistrement.
Ensuite, il y a les autorisations pour écrire dans le registre. UAC va certainement mettre un terme à cela, à la fois pour l'exécution de Regsvr32 ainsi que l'appel direct de l'entrypoint. Pour obtenir l'autorisation de l'utilisateur, vous aurez besoin d'un fichier EXE séparé avec un manifeste qui demande des droits d'administrateur. Tu n'es pas en avance.
Regardez dans COM sans Reg, fournissant les informations d'enregistrement dans un manifeste. Vous n'aurez plus alors à enregistrer la DLL. Vous obtiendrez beaucoup de hits si vous recherchez le terme.
Mon objectif est une application qui peut s'installer si vous passez le bon commutateur de ligne de commande, donc je n'ai aucun problème à quitter après avoir appelé DllRegisterServer. Mais COM sans reg semble intéressant. –
Ai-je manqué quelque chose ou est-ce que reg est gratuit? COM est aussi simple que de mettre 'isolated' à true? –
Peur, les applications isolées stockent leurs DLL dans le cache côte-à-côte. Un genre similaire de manifeste hanky-panky cependant. –
J'espérais vraiment répondre à 'InstallUtil';) – leppie
Si COM sans reg ne fonctionne pas pour moi, je finirai probablement par écrire une classe compatible avec InstallUtil. –
InstallUtil ne peut pas non plus fonctionner, vous n'avez pas les permissions requises. Pas qu'il a été conçu pour COM btw. –