Я сделал INF файл, его содержимое выглядит следующим образом
[version]
Signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
MyControl.dll=MyControl.dll
; Now installing the ActiveX
[MyControl.dll]
file-win32-x86=thiscab
clsid={05B7BC83-FCA1-452d-9D33-193784FEC637}
FileVersion=1,0,0,1
RegisterServer=yes
но элемент управления не зарегистрирован после завершения установки Internet Explorer, и каждый раз, когда я нажимаю F5 для обновления веб-страницы, в моем браузере отображается запрос на установку. что означает, что он не установлен на моей машине. И когда я запускаю команду regasm /tlb /codebase MyControl.dll
, она начинает работать нормально... Я написал свой элемент управления ActiveX в С# и здесь регистрирую функцию
[ComRegisterFunction()]
public static void RegisterClass ( string key )
{
// Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it
StringBuilder sb = new StringBuilder ( key ) ;
sb.Replace(@"HKEY_CLASSES_ROOT\","") ;
// Open the CLSID\{guid} key for write access
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(),true);
// And create the 'Control' key - this allows it to show up in
// the ActiveX control container
RegistryKey ctrl = k.CreateSubKey ( "Control" ) ;
ctrl.Close ( ) ;
// Next create the CodeBase entry - needed if not string named and GACced.
RegistryKey inprocServer32 = k.OpenSubKey ( "InprocServer32" , true ) ;
inprocServer32.SetValue ( "CodeBase" , Assembly.GetExecutingAssembly().CodeBase ) ;
inprocServer32.Close ( ) ;
// Finally close the main key
k.Close ( ) ;
//MessageBox.Show("Registered");
}
Пожалуйста, помогите мне в том, почему RegisterServer=yes
не вызывает эту функцию, и я должен вызвать ее вручную, используя команду regasm /tlb /codebase MyControl.dll
?
Когда содержимое CAB, указанное с RegisterServer = yes, зарегистрировано, оно использует regsvr32. Ваша сборка С# требует regasm, поэтому вам нужен дополнительный механизм для принудительного использования regasm. Предлагаемый способ - это пакет msi, который даст пользователю возможность удалить ваш компонент.
Здесь немного больше подробностей о том, как реализовать обходной путь Ummar в Загрузка компонентов CX ActiveX через файл CAB в статье CodeProject
(Отказ от ответственности: я не пробовал - только нашел статью через неделю после того, как прибегал к использованию ATL и С++:-().