Q: What is this "ROS explorer" ?
A: It is a freely available program intended as replacement of MS Windows Explorer in the upcoming open source operation system ReactOS. It covers the explorer functionalities of desktop, explorer windows, desktop bar with start menu, task bar and notification area (where you can see the "tray icons"). It is not yet complete, it's work in progress. However you can already work with it. I have installed it for me as default shell. This is the best way to find problems with it, and to encounter, which functions are missing the most.
(click to see more details)
Q: On which platforms does it already run ?
A: It does run on
Windows XP, and on Windows Server 2003. It should also work
under Windows 2000, however I did not test this.
The first release of ReactOS, which booted into a graphical environment was version 0.2 in January 2004. It launched explorer as its graphical work bench. It provides the desktop window, desktop bar, start menu and even the basic functions of explorer and cabinet file windows.
To achieve this, it uses a few DLLs of Wine, which are integrated in the ReactOS release and maintained fpr this two projects.
Explorer is heavily dependent on operating system functions for managing the shell object namespace. So you will currently notice some differences between running it with original Windows system libraries and with Wine DLLs. There is only basic functionality implemented in Wine's shell32.dll. Hope that will change in the near future. Also does the whole shell namespace depend on correctly configured registry entries. And there are really many of them.
Q: How did it evolve?
A: Some time ago, I
was disappointed by Microsoft, as they did remove the File
Manager "winfile.exe" from their delivered operating systems. I
think, they dropped it from Windows 2000 on. Windows NT 4.0
still contained it, however it was not available as a
start menu entry. As I am a very happy user of this tool, and
missing many features of it in Windows Explorer, I decided to
write my own File Manager clone, since I feared, some time the
old File Manger would be no more compatible to new Windows
versions. However currently it does run on Windows XP. There
are only minor problems with it, like the feature to determine
which user currently has opened a file ("Open By..." in the
file properties dialog).
Well, I did not really finish this project. I got stock with it at a point, where you could browse the file system, but not do many more with it. Later on it was included as "winefile" into Wine, an Open Source implementation of the Windows API on top of Unix. Built under Linux as Winelib application it has the benefit of not only being able to browse the WIN32 file system, but also the unix file system.
Then I encountered this new open source operating system "ReactOS". They already did include an older version of my "winefile" File Manager clone, and were yet missing an Explorer program. So I started extending winefile for the missing explorer functionalities, but leaving the file manager approach of being able to use one window per drive in a MDI user interface.
To be able to do this in reasonable time and increase maintainability, I converted the previous C project into C++. I am using advanced features like lists, maps and sets of the STL (C++ Standard Template Library) for creating small but efficient code. The code is mostly written in the spirit of Resource Management, which is explained very informative by ReliSoft.
Q: How can I get it ?
A: There is a snapshot of the binary and one of the source code you can download. However they will be almost outdated at the time you are downloading them. To get an up-to-date version, you should get the current source code using Subversion and compile it yourself. If you also want to use this pretty ROS background picture, look into this archive.
Q: What license is it using?
A: It is licensed by the LGPL 2.1, so you can use it without licensing derived work using the GPL.
Q: How can I run it ?
A: If you simply execute "explorer.exe", it checks, if there is
already running a desktop. If not, it starts up in desktop
mode. If there is already a desktop application, it starts in
window mode and displays an explorer window to browse the shell
If you want to force it to start up in desktop mode regardless of an already running desktop, specify an additional command line option, and run it with the command "explorer -desktop".
If you want to replace windows explorer with ROS explorer, you can achieve this by setting the registry value "Shell" at the key "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon". Insert into this value the full path of your ROS explorer executable (here you can see a screenshot). For example I do have the value "d:\osexperts\reactos\subsys\system\explorer\explorer.exe" there. This overrides the default shell for the currently logged on user. When termination the ROS explorer after logging in, windows explorer will start up. So you always have a fallback, if something goes wrong.
If you want to change the explorer for all users of a system at once, you can also change the registry value "Shell" at "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon".
You can always start Windows explorer by running "explorer.exe" (without path) for example with the "Run..." command in Task Manager. Simply press CTRL+ALT+DEL to launch it, and look into the "File" menu.
Newer versions of ROS Explorer contain the command line option "-install" to do this without fiddling with the registry editor and replace the previous shell application just by executing "explorer.exe -install".
Q: How to terminate it ?
A: To terminate the desktop, click at "Log Off..." in the start menu. This currently does not really finish your login session. It merely terminates the running explorer instance, and Windows restarts another Explorer. If you installed ROS explorer only on a per-user basis, you then get the Windows Explorer.
Q: Is it complete ?
A: No. There is yet many missing
Here is a list of things already on the TODO list: (The up-to-date list is available in the current source code.)
context menus for quick launch bar
detect display mode changes and adjust desktop bar size
handling of full screen applications
implementation of additional deskbands
Drag & drop and file renaming on the desktop does not work.
implement Drag & drop from the tree view.
activate accelerator keys like <DEL> in shell view folders
command line parameters like "/e,/root,c:\"
search functionality in start menu
Application Desktop Toolbars
Also this explorer implementation is not very configurable. Windows Explorer looks at very many entries in the registry to decide if this and that feature is to be displayed or not. Well, this lack of configurability may also be a feature. It makes the program leaner if it only contains that features, you really need.
There may be many more things than listed here missing from ROS Explorer.
There is also an automatically generated TODO list, which is regularly updated from the source code in the repository.
explorer windows to browse file system and shell namespace
launching of programs and documents through explorer windows and desktop
context menu handling on the desktop and in explorer windows
Drag & drop in explorer windows partly implemented
desktop bar notification icons
"Run..." functionality in start menu
Shell Service Objects
Explorer windows offer a MDI (Multiple Document Interface). So you can open more than one tree in an explorer window.
Tree browsing is not restricted to shell namespace. There is also the possibility to open explicit "drive windows" like in the good old Windows File Manager (winfile.exe).
menu entry "Drives" in the start menu to directly browse the file system
browsing of NT Object namespace
browsing of registry
advanced tray icons:
In Windows the tray icons "hang" around if the owning program terminates unexpected, until you move the mouse over them. I think, almost every one has seen this bug. In the ROS Explorer implementation this is resolved. Icons disappear automatically, if the corresponding process terminates.
Q: Does it have bugs?
A: Of course. If you find one, please try to figure out how to resolve it, and notify me of what you could find.
Q: Is there any source code documentation ?
A: Yes. You can read it online or download one of the following two files:
compressed HTML help file
compressed HTML help file of complete source code, including private class members
Q: What do I need to compile it myself ?
A: There are several
possibilities: You can use the free GCC compiler in its
version, or you can use Microsofts Visual C++ to compile the
explorer. For compiling with VC++ you need the latest Platform
SDK headers and libraries as of July 2003. If you want to
compile the whole ReactOS operating system, there is no choice.
You have to use MinGW as build environment. There is also the
possibility to cross-compile the source code under Linux. Last
but not least you can also compile it as a Winelib
application. For this use the "Makefile.Wine", however I don't want to
conceal a little warning about this, since the Makefile may not
always be up-to-date.
The source code is stored in a source code repository managed by the revision control system Subversion. So you have to install a Subversion client at your computer. You can use any one of the different clients like for example TortoiseSVN, but I recommend the command line version for Windows. Also are the commands, which I describe in this FAQ, only valid if you have installed a command line version of Subversion.
To install MinGW, you have to download and install MinGW of at least Version 3.1.0.
You have to install the W32API headers and libraries of at least version 2.4 (already included in MinGW 3.1.0). Install the files of the download package on top of your MinGW installation, e.g. to "D:\MinGW".
Furthermore you need to install the "make" utility. An older version like that of 7/2001 will also do it.
If you want to get the full ReactOS source code, you can do this by executing:
svn co svn://svn.reactos.org/reactos/trunk/reactos
If you only want to compile the explorer, not the whole ReactOS, and you have VC++ installed, you can check out only that part, which contains the explorer source code, you don't need all that other. Go into your command prompt, change the working directory to the directory, where you want to place the files, and type in the following to get the files by Subversion:
There is also a branch for a stripped-down small version of ROS Explorer without many advanced features:
Finally you can start the build process by invoking "mingw32-make.exe" (or "make.exe" if your MinGW installation uses this executable name) in the directory "reactos/subsys/system/explorer" to compile the explorer.
To compile the explorer independent from the other ReactOS code using an MinGW environment, use the command "mingw32-make -f Makefile.MinGW".
To build ReactOS you invoke "mingw32-make" in the root directory "reactos". Be sure, Cygwin is not in your PATH environment for building ReactOS. Otherwise you will get error messages because the Cygwin shell /bin/sh will be called. And it doesn't understand Back Slashs used as path separators.
If you want to use a mingw32 cross compiler environment under Linux, here is a description of how to set it up. There are also available precompiled binaries, if you have the correct operating system. (Linux x86, GLIBC 2.3) If you use this, you should install a link, which is yet missing there:
With this you can put in your PATH to switch to the cross compiler environment. I am using a little script "mingw32" to achieve this:
Put it in your path (e.g. /usr/local/bin), "chmod +x" it, then call it with bash as ". mingw32".
Here you can get scripts for downloading, compiling and installing a mingw cross compiler environment in one step.
Patvor pointed out this web site with one more cross compiling script.
If you want to compile the explorer with Visual C++, you need the version 6.0 with installed Service Pack SP5.
Open the project workspace "explorer.dsw" and build the project "explorer" as "Win32 Debug" or "Win32 Release" version.
You can also build the program using VS.Net
2002 or VS.Net 2003.
But be aware, I do not regularly test builds with this compilers.
Also you should pay attention: The IDE reads in the VC6 format project files, as you open them the first time. So if there are any changes, you have to repeat this conversion:
Update the source code from the repository.
Close all open projects and delete the new format project files (*.vcproj, *.sln).
Then reopen the VC6 project files with VS.Net, and it will convert them into the new format again.
Q: The compiler complains, it cannot understand some function or symbol. What is wrong ?
A: You may not have installed the
current W32API headers. Try to install the
current W32API version.
Another possibility is, there may be a problem with the current code in the repository. Listen to the ReactOS "Developers List" mailing list, if someone has the same problem. It may be fixed one or a few days later. Feel free to find the problem yourself and report it to the list.
Q: I get this error using VC++:
c:\reactos\subsys\system\explorer\desktop\desktop.cpp(46): error C2065:
'GetShellWindow' : undeclared identifier
A: GetShellWindow() has been made public by MS only a few months ago. It is declared in the Platform SDK of 2003. Before this it has been an undocumented function. There are also the two functions SetShellWindow() and SetShellWindowEx(), which are exported by WIN2000, but not yet documented in the MSDN.
Q: I can compile the source files, but the linker complains about some missing symbols like "CLSID_DragDropHelper".
A: You may not have installed the
current W32API libraries. Try to install the
current W32API version.
Q: How can I update my already checked out source code to the current version ?
A: Go to the root directory "reactos", where you did check out the source code. There initiate the command "svn up". To compile it, simply type another "make" in the reactos (or in the "explorer" subdirectory if you are only interested in explorer). If you get some unexpected errors, try, if a "make clean all" helps. In this case there may be some problems with file dependencies, which are sometimes not completely correctly handled in the makefiles.
All this stuff about downloads,
installation, compiling and linking sounds a bit complicated,
doesn't it ?
At least it is possible and may become easier in future. So I wish you good luck! :-)
Q: Who are you?
A: I am Martin Fuchs and live in Germany. You can reach me by mail at:
Go to my ReactOS Wiki Page with additional Links
There is also a Belorussian translation of this page.
last update: 02.07.2011
|says you are visitor number since 21.09.2003||main page|