Почему я не могу получить доступ к своему классу через COM? - PullRequest
0 голосов
/ 27 июля 2010

У меня есть библиотека классов, которую я написал на C # .net.Я хочу зарегистрировать его в COM на моей машине с 64-битным Windows, чтобы я мог создавать его экземпляры с помощью CreateObject () в сценариях (javascript, vbscript и т. Д.).Поэтому я создал проект установки.Я установил Целевую платформу проекта установки на x64.Целевая платформа проекта библиотеки классов установлена ​​для AnyCPU.Я создал пользовательское действие для установщика, который выполняет регистрацию драйвера вручную, и это выглядит так ...

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(this.GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{           
   throw new InstallException("Failed To Register driver for COM Interop");
}

Я могу подключить отладчик к этому процессу, когда он запускается, и точно знаю, чтоэта регистрация происходит успешно.

По какой-то причине, когда я пытаюсь создать объект класса с помощью CreateObject (), он выдает мне сообщение об ошибке «Не удалось создать объект с именем ...».Однако, если я запускаю сценарий с помощью cscript.exe в папке SysWOW64 (32-битная папка), объект создается успешно, а остальная часть моего сценария работает нормально.Таким образом, создается впечатление, что класс успешно регистрируется для 32-битной, но не для 64-ИЛИ ИЛИ, что мой проект имеет 32-битную зависимость и 64-битный хост-процесс Cscript не может создать его из-за этой зависимости.Моя библиотека классов ссылается на еще один проект, который я написал, но он также настроен на ЛЮБОЙ ЦП.Так что это должно быть хорошо для 32- и 64-битных процессов.

У кого-нибудь есть какие-либо предложения о том, как мне отслеживать эту 32-битную зависимость?

1 Ответ

1 голос
/ 27 июля 2010

Использование RegisterAssembly () - очень необычно. Единственное, что здесь может пойти не так, это то, что установщик работает в 32-битном режиме. Что заставит RegisterAssembly () зарегистрировать COM-сервер в неправильном разделе реестра.

Нет необходимости делать это, просто установите свойство Register для файла в COM в проекте установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...