Я не знаю, является ли это ошибкой или нет, но это, вероятно, связано со свойством компонента "Bitness" COM +: Коллекция компонентов
Как указано в документе "Битность "может быть установлен на 1 (32-разрядный) или 2 (64-разрядный).Вы можете прочитать значение Bitness для данного компонента, используя такой код C #:
COMAdminCatalog catalog = new COMAdminCatalogClass();
ICatalogCollection appCollection = (ICatalogCollection)catalog.GetCollection("Applications");
appCollection.Populate();
// browse all apps
foreach (COMAdminCatalogObject app in appCollection)
{
Console.WriteLine("application=" + app.Name);
// browse all components
ICatalogCollection compCollection = (ICatalogCollection)appCollection.GetCollection("Components", app.Key);
compCollection.Populate();
foreach (COMAdminCatalogObject comp in compCollection)
{
Console.WriteLine(" component=" + comp.Name);
Console.WriteLine(" bitness=" + comp.get_Value("Bitness"));
}
}
К сожалению, Bitness является свойством ReadOnly.Из того, что я понимаю, базовый процесс регистрации COM использует битность процесса, фактически выполняющего регистрацию, чтобы определить, как установить это свойство.
Это косвенно объясняется в этой статье: Обслуживаемые компоненты в 32-Битовая и 64-битная архитектура
Как видно из таблицы, регистрация в 64 или 32 бита зависит от версии используемого вами инструмента.Вот почему такой инструмент, как Regsvcs.exe, доступен в двух вариантах: 32 и 64-битных, и от этого просто зависит, как ваш компонент регистрируется.Кроме того, обратите внимание на то, что вещи могут отличаться, если приложение COM + пусто или нет.
Я думаю, это означает, что ваш работающий .EXE должен быть скомпилирован в 64-битной версии.