Начиная с ХР к программам можно добавлять "манифесты" - это либо файл в каталоге программы с доп. расширением .manifest (т.е. для например проги myprog.exe это будет myprog.exe.manifest) либо соответв. ресурс exe-файла. Сам манифест представляет собой xml, и в нем описываются различные параметры проги. В числе прочих там есть зависимости (dependency)
Например
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="BmpView" processorArchitecture="*" version="1.0.0.0" type="win32" />
<description>
BmpView Sample Program
</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*" />
</dependentAssembly>
</dependency>
</assembly>
Тут указывается, что программе нужна библиотека Microsoft.Windows.Common-Controls. И система при запуске будет ее искать и подключать (в результате приложение примет "ХРшный" вид).
Так вот, в зависимостях можно указывать не только компоненты системы, но и свои. И не только те которые зарегистрированы в реестре, но и любые иные. Для этого надо иметь их манифесты в каталоге программы.
Например, у нас есть некая библиотека cool.control (файл cool.ocx) которую хотим использовать. Мы в манифест программы в часть <dependency> / <dependentAssembly> добавляем запись навроде <assemblyIdentity type="win32" name="cool.control">, а в каталог программы кладем файл cool.control.manifest в кртором указываются все параметры данной библиотеки (в часности и имя файла)
(вот типа так)
...
<assemblyIdentity type="win32" name="cool.control"/>
<file name = "cool.ocx">
<comClass clsid="{12345678-90ab-cdef-0987-654321012345}"
progid = "cool.text" threadingModel = "Apartment" />
----описание всяких прочих cls_id и prog_id и т.п
</file>
....
Таким образом, можно использовать ком-компоненты, не регистря их в реестре.