In Wine, you get a popup if your program tries to load a WebBrowser control. That popup asks you if you want to download the Mozilla control. This is implemented in shdocvw.dll. Since we use the same code in ReactOS, I expected to get the same popup, but it doesn't show, instead ibrowser (as an example of an app that tries to load a WebBrowser control) just says "Sorry - no web browser control could be loaded".
The reason that it doesn't work the same as in Wine is that the DllRegisterServer() procedure of shdocvw.dll is never called during setup. If you manually register shdocvw.dll ("regsvr32 shdocvw.dll") you do get the popup.
There are 2 ways to fix this: we could hack it and add the registry entries (class registration) to hivecls.inf, or we can properly implement DLL registration during (second stage) setup. Although I don't mind cutting a corner every now and then, in this case my preference is to implement DLL registration during setup.
That means we'll need an .inf file to describe which DLLs need to be registered. Windows has a syssetup.inf file for this, with a [OleControlDlls] section listing the DLLs to register/install. We can of course manually maintain a syssetup.inf file in bootdata, but this means one more file to keep up to date when you add a module. So I was thinking, maybe we could add an 'autoregister="R"' (indicating setup should call DllRegisterServer(), "I" to indicate it should call DllInstall() and "B" to indicate it should call both) attribute to <module> in the .xml file. Then rbuild should be able to automatically generate a syssetup.inf file. We could go one step further and also generate the bootdata/packages/reactos.dff file in a similar way.
So, does this sound like the correct approach? If so, would anyone be interested in implementing the rbuild side of things? I can take care of the stuff that needs to be done during setup, but I've never worked on rbuild before.
Gé van Geldorp.