Установщик не может правильно зарегистрировать COM-компонент

Моя команда недавно внесла несколько изменений в компонент VB.NET, и у нас есть серьезные проблемы в нашей лаборатории обеспечения качества, которые постоянно регистрируют компоненты для использования в Excel. Однако синдром "это работает на моей машине" вызывает у нас сильные головные боли.

Настройка:

  • C++ COM Server, использует IDL и статические направляющие для функций
  • Компонент VB.NET, ранее использовавшийся autodual
  • Установщик построен с InstallShield

Первым пунктом было то, что нам было поручено не использовать regasm для регистрации сборки, поскольку установщик автоматически генерируется на машине с использованием учетной записи, которая не имеет прав администратора. На компьютере разработчика (у которого есть права администратора) мы создаем файл.reg (regasm /reg VBNET.dll) и включить это в установщик.

Другое изменение (за которое я отвечаю) заключается в том, что я реорганизовал классы VB.NET, чтобы отойти от использования autodual и создать конкретные интерфейсы и реализации. У них есть образец следующего кода. При этом могут ли возникнуть проблемы с регистрацией COM-компонента?

Option Strict Off
Option Explicit On
Imports System.Runtime.InteropServices

<InterfaceType(ComInterfaceType.InterfaceIsDual)> _
<Guid("ABCD1234-FOO-BOO-ETC-GUIDHERE")> _
Public Interface ICorePoint
    <DispId(1)> Property PointX() As Double
    <DispId(2)> Property PointY() As Double
    <DispId(3)> Property PointZ() As Double
    <DispId(4)> Function Distance3D(ByVal ptB As ICorePoint) As Double
End Interface

' Implement the interface (in the same file)
<ProgId("CalculationCore_NET.CCorePoint")> _
<ClassInterface(ClassInterfaceType.None)> _
<Guid("A-DIFFERENT-GUID-HERE"> _
Public Class CCorePoint
    Implements ICorePoint
    Private m_x As Double
    Private m_y As Double
    Private m_z As Double
    Public Property PointX() As Double Implements ICorePoint.PointX
       'Implemented here'
    End Property
    'Repeat other implementations here
End Class

Последнее изменение заключается в том, что COM-сервер C++ получил совершенно новые идентификаторы GUID, поскольку мы разветвляли версии продуктов. Для этого мы используем regsvr, и у нас до сих пор не было проблем.

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

В качестве дополнительного вопроса, мы не регистрируем их в GAC и исторически зарегистрировали, используя regasm /tlb /codebase THEDLL, Я не уверен / я не думаю, что команда, сгенерировавшая tlb, имела /codebase флаг включен. Может ли это вызвать серьезные проблемы с тем, что мы пытаемся сделать?

0 ответов

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