How do I properly register a .NET assembly during an installation without calling RegAsm?

Refresh

5 days ago

Views

1.1k time

1

I have a .NET COM-visible out-of-process server, let's call it Server.exe. I need to be able to register it on systems that may have different versions of the .NET framework installed, so I'd like to avoid calling RegAsm by it's full name (which tends to contain the version number of the .NET framework).

I've been trying to get it working by exporting a registry patch and importing it with:

regasm /regfile:foo.reg Server.exe
reg import foo.reg

However, applying the patch does not properly register the component. I'm able to register it using regasm directly. I'm an admin. What is regasm doing that it's not writing to the registry patch?

Wug

1 answers

4

Это потому, что Regasm сломана и не ведет себя последовательно между обычной регистрацией и отложенной регистрацией через заплаты реестра, а также из-за свою квантовую природу, он будет производить различные записи в реестре, в зависимости от которых запрашивается поведение. Использование Regasm для моделирования квантовых вычислений между суперпозицией в процессе и вне процесса серверов еще предстоит изучить.

Для того, чтобы решить эту проблему:

  1. Используйте RegAsm /regfile:foo.reg Server.exeдля создания патча реестра.
  2. Используйте , RegAsm /register Server.exeчтобы правильно зарегистрировать тип.
  3. Открыть foo.reg в блокноте. Некоторые из ключей , указанных в foo.reg будет иметь путь формата: HKEY_CLASSES_ROOT\CLSID\{YOUR-CLSID}. Откройте редактор реестра и найдите этот ключ.
  4. Экспортировать этот ключ как bar.reg и открыть его в блокноте.
  5. Копирование всех записей из bar.reg в foo.reg, и удалить все существующие записи из foo.reg , которые добавляют значения в любую часть HKEY_CLASSES_ROOT\CLSID\{YOUR-CLSID}.

    • Имейте в виду , что если вы на 64 битной системе, перенаправление реестра, скорее всего , означает , этот ключ хранится в HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{YOUR-CLSID}вместо HKEY_CLASSES_ROOT\CLSID\{YOUR-CLSID}. Для того, чтобы обеспечить последовательное развертывание в течение 32 и 64 - битных систем, удалить Wow6432Node\из пути (оставляя пути , как они будут выглядеть на 32 битной системе) и применять их в реестр , используя reg import foo.reg /reg:32. /reg:32является полу-документированный выключатель , который должен работать на 32 и 64 - битных версий Windows , что позволит отражение реестра даже на 64 - битных версиях Reg, таким образом , убедившись , что записи устанавливаются в нужном месте.
Wug