Установщик не может правильно зарегистрировать 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
флаг включен. Может ли это вызвать серьезные проблемы с тем, что мы пытаемся сделать?