Как сделать RegAsm так, чтобы он охватывал 32-битные и 64-битные?

У меня есть DLL файл, подготовленный С#, а моя система - 64-разрядная Windows 7. Когда я применяю RegAsm, он не добавляет реестр к 64-битовому пути, а только добавляет его к 32-битовому пути.

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\o.dll"

то если я проверю свой GUID в regedit.exe, я вижу, что у меня это только в 32-битном пути реестра: HKEY_CLASSES_ROOT\CLSID\{... my guid is found here ....}

вместо HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{... not found my guid ...}

В результате у меня есть другие проблемы для этого. Кто-нибудь может спросить, что происходит, и почему он не делает 32-битные и 64-разрядные записи реестра?

Ответ 1

У вас есть это в обратном направлении. Wow6432Node - это место, где идут 32-разрядные данные. Используйте 32-разрядную regasm (из каталога Framework, а не каталога Framework64), чтобы ваш компонент зарегистрировался в Wow6432Node.

Ответ 2

Кроме того, вы, вероятно, скомпилировали свою DLL с опцией AllCPU попробуйте скомпилировать с опцией x64 и/или x86 и зарегистрируйтесь как вы делаете

  • для x64 - "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\x64\o.dll"
  • для x86 - "C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /register /codebase "C:\x86\o.dll"

Постскриптум вопрос 5лет, но может помочь другим народам