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

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

То, что я пытаюсь достичь, - это включить установку xcopy. У меня был файл "AxInterop..dll" и "Interop..dll", созданный на моей машине dev.

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

Ответ 1

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

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

Пошаговое руководство, которое нужно сделать, - это статья в MSDN: Без активации активации COM-компонентов: пошаговое руководство

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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