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.
Hi,
--- Ge van Geldorp gvg@reactos.org wrote:
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.
Sounds good to me except I am not comfortable hacking on large areas of rbuild. Casper or Royce?
Thanks Steven
__________________________________ Yahoo! FareChase: Search multiple travel sites in one click. http://farechase.yahoo.com
Ge van Geldorp wrote: [snip]
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.
We already have syssetup.inf in media/inf and it's processed during second stage setup (not sure if we run the SPINST_REGSVR action tho).
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.
Surely it would be interesting to autogenerate it (but not into syssetup.inf directly).
- Filip
-----Original Message----- From: ros-dev-bounces@reactos.org [mailto:ros-dev-bounces@reactos.org] On Behalf Of Filip Navara Sent: 21. november 2005 06:53 To: ReactOS Development List Subject: Re: [ros-dev] DLL registration during setup: new rbuild task?
Surely it would be interesting to autogenerate it (but not into syssetup.inf directly).
What parts of syssetup.inf can't be autogenerated?
Casper
From: Filip Navara
We already have syssetup.inf in media/inf and it's processed during second stage setup (not sure if we run the SPINST_REGSVR action tho).
Thanks, I missed that one (was looking in bootdata only). It currently doesn't contain RegisterDll directives though, so even if it is run with SPINST_REGSVR nothing happens.
GvG
-----Original Message----- From: ros-dev-bounces@reactos.org [mailto:ros-dev-bounces@reactos.org] On Behalf Of Ge van Geldorp Sent: 20. november 2005 23:18 To: 'ReactOS Development List' Subject: [ros-dev] DLL registration during setup: new rbuild task?
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.
The values of autoregister should be more self-explaining.
I can implement this in rbuild.
Casper
From: Casper Hornstrup
The values of autoregister should be more self-explaining.
I'll gladly leave that up to you :-) The reason I mentioned R/I/B was because those are the values used in the Win2k syssetup.inf. I've since found that XP uses the numeric values documented in http://msdn.microsoft.com/library/default.asp?url=/library/en-us/DevInst_r/h h/DevInst_r/inf-format_8ac2b721-76cc-4b5c-8d84-cb546161429d.xml.asp (and I would prefer the numeric values since we can then easily use setupapi).
I can implement this in rbuild.
Great, thanks!
From: Filip Navara
Surely it would be interesting to autogenerate it (but not into syssetup.inf directly).
What parts of syssetup.inf can't be autogenerated?
Our current syssetup.inf contains a [DeviceInfsToInstall] section, not sure how to autogenerate that. I guess another set of attributes could be added in media/inf/inf.xml? There are also some sections in the (MS) syssetup.inf to populate the start menu, would be nice to move our current hard-coded items to syssetup.inf at some point. Perhaps rbuild should start from a template and fill in the blanks?
Looking at the MS syssetup.inf, I get the distinct feeling that they do generate it (blank lines in unexpected locations). Of course, just because they do doesn't mean that we also must do it exactly the same way, it's just an indication that it might be possible to autogenerate.
GvG
-----Original Message----- From: ros-dev-bounces@reactos.org [mailto:ros-dev-bounces@reactos.org] On Behalf Of Ge van Geldorp Sent: 21. november 2005 09:49 To: 'ReactOS Development List' Subject: RE: [ros-dev] DLL registration during setup: new rbuild task?
Our current syssetup.inf contains a [DeviceInfsToInstall] section, not sure how to autogenerate that. I guess another set of attributes could be added in media/inf/inf.xml? There are also some sections in the (MS) syssetup.inf to populate the start menu, would be nice to move our current hard-coded items to syssetup.inf at some point. Perhaps rbuild should start from a template and fill in the blanks?
Looking at the MS syssetup.inf, I get the distinct feeling that they do generate it (blank lines in unexpected locations). Of course, just because they do doesn't mean that we also must do it exactly the same way, it's just an indication that it might be possible to autogenerate.
GvG
Maybe, you can help by separating the .inf manipulation code from usetup into its own static library? It would be easy to just append the sections to a template syssetup.inf then.
Casper