Я занимаюсь разработкой приложения .NET, которое опирается на стареющий элемент управления OCX. Этот элемент управления обеспечивает интерфейс терминала, который позволяет пользователю взаимодействовать с системой бронирования авиабилетов. Он уже используется «успешно» в нескольких приложениях VB6, но в будущем нам нужно/нужно использовать его в .NET-приложениях.Старение 32-разрядного элемента управления OCX не загружается в .NET.
Итак, в окне Windows XP (x86) с использованием .NET 4 и Visual Studio 2010 я создал как Winforms, так и WPF-приложения, которые используют элемент управления, который был правильно зарегистрирован. Я внедрил Reg Free COM и, используя как XCOPY, так и Click-Once, оба проекта могут быть успешно развернуты на компьютерах под управлением Windows XP (x86), и оба работают как ожидалось, не регистрируя элемент управления. К сожалению, то же самое нельзя сказать о развертывании в Vista (x86) и Windows 7 (x64), где приложение запускается, но управление не отображается.
В попытке понять проблему я попытался зарегистрировать элемент управления в среде разработки Windows 7 (x64). Я попытался как:
- регистрируя управления с помощью обычного regsvr32 (x64 реестра)
- регистрации управления находится в директории SysWOW64, используя версию SysWOW64 из regsvr32 (x86 реестра)
В в обоих случаях управление, похоже, успешно зарегистрировалось, и в новом проекте Winforms я могу добавить элемент управления в панель инструментов (значки появляются и т. д.). Однако, как только я перетаскиваю элемент управления в форму, он отображается как крошечный прямоугольник в углу формы (а не в терминальном окне, как показано на XP), даже файлы Interop генерируются так же, как XP?
управления, как показано на XP
контролем, как показано в Windows 7 при выборе
Я провел возрастов тралового сеть для любого вида раствора или схожие проблемы безрезультатно. Любые предложения приветствуются!
Update 1:
Как было предложено @DanielHilgarth, я создал простое приложение в VB6 с помощью элемента управления и запустить его на Windows 7 (x64) и раздражающе он улавливает зарегистрированный COM компонент и работает как и ожидалось, даже несмотря на то, что приложение или проект .NET можно запускать рядом, и никакого контроля не видно !?
Update 2
Если я создаю основное приложение Winforms на моем XP поле с помощью элемента управления (но требующим контроля для регистрации, т.е. не рег бесплатно). Когда это будет запущено на моем компьютере с Windows 7 (x64), если он не запустится (как и ожидалось) без регистрации элемента управления. Для приложения, похоже, не имеет значения, зарегистрирован ли элемент управления в реестре x86/x64, как только он начнется, но никакого контроля не будет видно !?
Update 3
Я заметил, что если я запускаю проект Winforms (созданный в XP и COM рег бесплатно) на моей среде Windows 7, что форма дизайнер потерпит неудачу, если не зарегистрирован контроль (как и ожидалось) снова, похоже, не заботится о том, какой реестр зарегистрирован компонент. После регистрации форма дизайнер будет рассматриваться (без контроля), и когда строить следующие предупреждения видели:
Исследуя это предупреждение было бесполезно, это, кажется, указывает, что Visual Studio ищет в заблуждении путь реестра, но я не могу найти способ решить эту проблему?
Можете ли вы успешно использовать приложение VB6 с элементом управления OCX на машине Win7? BTW: вы можете загружать изображения в imageshack или аналогичный хостинг-провайдер и связывать их в свой вопрос. –
Это не похоже на проблему регистрации, которая генерирует исключения. Это похоже на элемент управления VB6, который нельзя просто разместить в форме .NET. Не каждый сценарий поддерживается, он должен быть достаточно эффективным элементом управления ActiveX. Не может быть оконным, не может создать собственное окно верхнего уровня и т. Д. Работайте с владельцами этого контроля, чтобы двигаться вперед. –
@ DanielHilgarth, это очень хороший вопрос. Раньше я не ездил по этому пути, потому что предыдущие приложения VB6 разработчика были очень бедными и требовали, чтобы он «настраивал» их установку! Но я отдам его! – snipey