Проблема с файлом .INF для регистрации ActiveX - PullRequest
2 голосов
/ 30 октября 2009

Я сделал 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 на C # и здесь регистрируется функция

[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?

Ответы [ 2 ]

1 голос
/ 19 февраля 2010

Когда регистрируется содержимое CAB, указанное с помощью RegisterServer = yes, оно использует regsvr32. Ваша сборка C # требует регазма, поэтому вам необходим дополнительный механизм для принудительного выполнения регазма. Предлагаемый способ - использовать пакет MSI, который даст пользователю возможность удалить ваш компонент.

1 голос
/ 25 января 2010

Немного подробнее о том, как реализовать обходной путь Ummar, можно прочитать в статье Загрузка компонентов ActiveX C # с помощью файла CAB в CodeProject

(Отказ от ответственности: я не пробовал - нашел статью только через неделю после того, как прибегнул к использованию ATL и C ++ :-().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...