Вызов сборки COM Interop .Net из Visual Basic 6.0

У нас есть проект, работающий на Visual Basic 6.0, который мы пытаемся перенести в Desktop Bridge. Все работает нормально, когда мы используем командную строку DAC. Преобразованное приложение, преобразованное как есть, прекрасно работает на любом тестовом компьютере.

Нам даже удалось добавить сборку COM Interop .NET, чтобы иметь возможность использовать функции UWP (например, тосты).

Все отлично работает на любой машине разработчика, но не на тестовой машине. Что ж, загрузка COM Interop .Net Assembly из Visual Basic, похоже, не работает.

Основное отличие от тестовой машины и машины разработчика:

  1. На компьютере разработчика Visual Studio 2017 регистрирует dll как взаимодействие COM (с regasm, Под капотом)
  2. На тестовом компьютере мы сначала создаем установочный файл .msi (с помощью установщика Visual Studio 6, да, в старой версии IDE в стиле interdev;), а затем применяем командную строку DAC к этому новому.msi

Итак, кажется, что мы должны вручную зарегистрировать эту сборку на целевой тестовой машине, с regasm... поскольку установщик Visual Studio 6 не знает, как зарегистрировать сборку взаимодействия (используя regasm)

Как мы можем справиться с таким сценарием?

Что касается деталей у нас есть что-то прямое:

  • MyApplication.exe (vb6)
  • MyWrappers.dll.tlb) (сборка.net C#, помеченная для COM Interop и ссылающаяся на UWP SDK для возможности запуска уведомлений)

Еще раз, "установка" не падает. Только вызов сборки COM Interop для запуска уведомления о тосте.

На самом деле эта ошибка кажется очевидной, если DAC не упаковал эту сборку для взаимодействия COM, и это имеет смысл.

Любая идея?:)

Sebastien

1 ответ

Решение

Да, вам придется сделать регистрацию COM частью развертывания вашего пакета.

Один из способов сделать это - добавить регистрацию COM в существующий установщик (или объединить два установщика в цепочку), а затем снова запустить DAC на нем.

Другой вариант заключается в том, чтобы "вручную" добавить регистрацию COM к выходу DAC, который у вас уже есть (т.е. добавить в файл registry.dat).

Третий вариант - вообще не использовать COM, а вместо этого использовать простое взаимодействие Win32 для вызова API UWP из приложения VB6.

Я опубликовал пример / сообщение в блоге для этого: https://blogs.windows.com/buildingapps/2017/02/01/adding-uwp-features-existing-pc-software/

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