Регистрация в HKCR (и связанных отображенных кустах) требует привилегий администратора и всегда выполнялась. По сути, это та же проблема, что и «Я мог писать в каталог Program Files в XP, но не в Vista». Это потому, что все были администраторами в XP, но так как UAC никто не является администратором, если он не повышен каким-либо образом (запускается как администратор, являющийся обычным, а другой является приглашением повышения UAC).
Общие причины сбоя самостоятельной регистрации во время установки:
Отсутствие повышения прав (например, установка на пользователя, которая никогда не отображает диалоговое окно повышения прав UAC).
Отсутствующие зависимости. Может быть Dll, от которого зависит ваш, и это не от целевой системы. Если регистрация работает ПОСЛЕ завершения установки, вы можете зависеть от сборки Win32 или управляемого кода. Если у вас есть зависимость от среды выполнения C ++, которая относится к WinSxS, и вы включили ее в качестве модуля слияния, то она не будет зафиксирована до тех пор, пока не завершится установка и ваша регистрация не будет выполнена. То же самое верно для сборок, идущих в GAC, но это маловероятно в вашем случае регистрации Win32. Если это случайно в Windows 7, то это обычно потому, что в некоторых системах уже (скажем) установлены среды выполнения C ++, а в некоторых нет.
Большинство инструментов в настоящее время, включая Visual Studio и WiX, могут извлекать регистрацию COM во время сборки. Это статические данные, поэтому нет причин, по которым они не могут быть в файле MSI. В случае WiX инструмент называется Heat. Это также означает, что нет необходимости вызывать Dll во время установки, избегая проблем с зависимостями. Параметр vsdraCOM делает это, и я успешно использовал его, но, как и при любой регистрации, он требует, чтобы зависимые Dll были доступны во время сборки. Нет хорошего способа проверить, работает ли он, но если вы возьмете редактор MSI (например, Orca из Windows SDK) и откроете с ним файл MSI, вы должны увидеть свои классы в таблице классов, и что-то будет в Таблица реестра.
Это также может помочь, если бы у вас было больше подробностей о том, что на самом деле «не зарегистрировать» Есть ли пропущенные записи интерфейса, записи CLSID, сообщения об ошибках во время установки, приложения, которые не запускаются из-за невозможности создания экземпляра класса?