Регистрации в 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 с ним, вы должны увидеть свои классы в таблице Class, и там будет что-то в таблицу реестра.
Это могло бы также помочь, если бы у вас было больше деталей о том, что на самом деле «не регистрируется». Есть ли недостающие записи интерфейса, записи CLSID, сообщения об ошибках во время установки, приложения, которые не запускаются, потому что они не могут создать экземпляр класса?