2010-03-04 17 views
18

Domanda: Ho una DLL .NET che utilizzo da un programma C++. Ora devo registrare la DLL a livello di programmazione su un computer di distribuzione.Registrare una DLL COM di C#/VB.NET a livello di codice

Come faccio (programmaticamente, non usando il regasmo)? Ricordo che quando una volta ho chiamato una DLL VB6 da una DLL C++, dovevo usare DllRegisterServer e DllUnregisterServer.

E 'ancora così con una DLL .NET?
Sembra che debba in qualche modo aggiungere la funzione dllregisterserver alla DLL di .NET.

risposta

28

YUK, dll .NET non avere DllRegisterServer, in modo da avere per scrivere un programma di installazione di .NET, l'esecuzione di questo da qualche parte:

Assembly asm = Assembly.LoadFile (@"c:\temp\ImageConverter.dll"); 
RegistrationServices regAsm = new RegistrationServices(); 
bool bResult = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase); 
+0

AFAIK ha bisogno di diritti di amministratore. Non c'è una grande differenza nel chiamare direttamente "regasm". Ma funziona. +1 –

+2

@Arnaud Bouchez: Una grande differenza: puoi provare, aggirare il problema e gestire gli errori. Come con la generazione di un nuovo processo, è anche possibile, ma molto più lavoro. –

1

È possibile utilizzare process monitor per vedere quali modifiche al sistema (in pratica, modifiche del Registro di sistema, credo) vengono apportate quando si utilizza regasm.exe per registrare la DLL e quindi apportare tali modifiche al programma invece?

+0

Sì, questo è il modo per andare con puro C/C++. Bello, ma penso che potrebbe richiedere del tempo per capire come ottenere i dati per scrivere lì ... –

Problemi correlati