Используйте OCX без регистрации

Можно ли использовать ocx (элемент управления ActiveX) в winform (возможно, добавляя его программно) без предварительной регистрации ocx в regsrv32?

Я пытаюсь добиться установки xcopy. У меня есть файл "AxInterop..Dll" и "Interop..Dll", сгенерированный с моего компьютера разработчика.

Я видел возможность вызова COM-DLL без предварительной регистрации ( ProSysLib, по словам автора, но я еще не проверял), поскольку ocx также основан на COM, поэтому я предполагаю, что должен быть какой-то способ сделай то же самое.

6 ответов

Решение

Да, это можно сделать. Вы должны предполагать, что ваше приложение будет развернуто только в Windows XP (или Windows Server 2003) или более поздней версии, и тогда вы можете использовать так называемый COM без регистрации, чтобы это произошло.

По сути, вы создаете файл манифеста для управляющей DLL ActiveX, чтобы загрузчик Windows и COM DLL знали, что такое его регистрация, без необходимости вносить его в реестр.

Краткое описание того, что нужно сделать, находится в этой статье на MSDN: активация COM-компонентов без регистрации: пошаговое руководство .

"Шаг 6" и "Шаг 7" в этой статье содержат все, что вам нужно.

Я только что попробовал это на одной из моих собственных программ на C#, которая использует элемент управления Microsoft ActiveX Grid (старая "MS Flex Grid"), и он работает просто отлично. Убедитесь, что вы создали файл манифеста как для своего приложения, так и для COM DLL, и подставили соответствующие GUID в нужных местах. Возможно, вам придется использовать OLEVIEW, чтобы найти правильные идентификаторы для использования из библиотеки ActiveX DLL, если у вас их нет под рукой.

Имейте в виду, что использование COM-компонентов без реестра для COM-компонентов, созданных в.NET, может случайно привести к сбоям в Windows XP!

Ссылки: вопрос Stackru, где я узнал об этом, статья базы знаний Microsoft, упомянутая в этом вопросе. Существует исправление, но вы не можете распространять его.

В Visual Studio это даже намного проще: просто зайдите в Ссылки, найдите позиции, созданные вашим ocx (должно быть 2, AxSomething и Something) и установите для них обоих Isolated: true в их свойствах. Нет манифестов, нет кода. Теперь вы должны распространять ваш exe-файл с помощью dll-файла, содержащего ocx. На вашем разработчике ocx можно зарегистрировать.

Теперь в веб-архиве есть копия решения для недоступного сайта щелчка: mmm4vb6.atom5.com/yes-update-0-12-5479.html#c: http://web.archive.org/web/20140828233304/http://mmm4vb6.atom5.com/yes-update-0-12-5479.html

и контекст:

Сделать мой манифест

7 апреля 2013 г., воскресенье

Да, обновление

Хотя я уже не так активно использую VB6 для повседневной работы, по пути мне и моим коллегам пришлось переупаковывать некоторые существующие приложения после исправления ошибок и просто справляться с меняющимся ландшафтом Windows.

Мы внесли несколько изменений с момента публикации последней версии, и все выглядит хорошо. Я решил опубликовать это обновление, но учтите, что оно не было протестировано так тщательно, как большинство предыдущих выпусков!

Поэтому не забудьте тщательно протестировать свои MMM-приложения, упакованные с использованием MMM 0.12, перед их выпуском.

См. Подробности в журнале изменений (Related\MMMChangeLog.txt). Вот заметные изменения:

Еще одна попытка улучшить / исправить узел DPI-Aware манифеста. Изменение обработки TLB для предотвращения их включения. TLB обычно не требуются во время выполнения. Если вам все же нужно включить их, добавьте их самостоятельно через Добавить файлы или скопируйте их в целевую папку позже. Попытка справиться с патчами Microsoft, из-за которых в манифестах MMM приводились "дублирующие" записи coClass. Лучшая (мы надеемся) обработка несоздаваемых классов, содержащихся в некоторых OCX, поставляемых с VB6. Я надеюсь, что это решит некоторые проблемы, с которыми вы тоже можете столкнуться в этих областях. И, конечно, я надеюсь, что эта версия ничего не сломает и не ухудшит положение.

Получите новую версию, скачав:

МММ-0-12

Отправлено 7 апреля 2013 г., 14:59...

После 10 часов поиска того, как запустить приложение VB6 с OCX на Win7 без регистрации его и прав администратора, я нашел решение для нескольких щелчков здесь: http://mmm4vb6.atom5.com/yes-update-0-12-5479.html

Необходимо проверить Embed Manifest, чтобы он работал. Работает как шарм!

Я делаю пост решение здесь, потому что я также нашел этот вопрос здесь.

Я преобразовал ocx в dll с помощью

  • открытие «Командной строки разработчика для VS 2019»
  • вызов "tlbimp имя_файла.ocx"

затем я импортировал полученный файл filename.dll в качестве ссылки в свой проект.

Ссылка: https://docs.microsoft.com/en-us/dotnet/framework/tools/tlbimp-exe-type-library-importer

Другие вопросы по тегам