Re: PATH variable
The path variable works like this:
When a command is entered at the prompt, the interpreter tries to fullfill it, checking things in this order.
1) Is the command in my builtin list?
(Things like dir, copy, del, etc)
2) is this a .com, .exe, or .bat in the local directory context? (Searched in that order)
3) if it's not either of those things, start walking the PATH variable. Is the entered command a .com, .exe, or .bat found in any of the paths in the variable's list?
If no to all of these, 'invalid command', or 'file not found'.
Windows keeps a great many ways to keep track of where things are, using the path, as well as registry entries, and .inf file declaration entries.
If the registry does not have a path for a library or program defined, and there is no .inf involved that might tell windows where to look, it will also fall-back on checking the path variable.
As I said in my last post, the path gets populated in this manner:
In msdos.sys, there is a declaration which sets this initially, along with the drive letter windows is installed on. This initially populates PATH with [drive:\]windows;[drive:\]windows\command
This is why you can run things like scandisk without any trouble, and why just putting 'win' at the prompt anywhere can start windows, even if you tell windows to skip autoexec.bat and config.sys
Autoexec.bat will also get a declaration for PATH by default after installing windows, but it basically just contains a less intelligently applied version of this basic path.
It's mainly there for dos compatibility, as many dos programs want their folders in the path statement, so that they can better handle having been installed in a user defined location. They can be run, and find all their libraries easily this way.
And lastly, when windows starts, it appends a path statement to the end, based on a string value stored in the registry. Like dos programs, many win32 console programs want to have entries in this variable for the same reasons, and windows supplies this facility for these win32 console programs, without cluttering the statement in autoexec.bat. This is why the 'effective path' from a prompt within windows can be quite different than the one at the actual dos prompt when windows is not running.
Why all this might matter:
In the early stages of starting (like when it is setting up the vmm, loading vxd files, and getting the windows kernel ready) the facilities for loading and appending this windows specific path have not been activated yet. If a vxd, for instance, needs some helper program to run (like your mysterious 'xit'), it needs to be inside the path statement to be found. This is generally why such helper programs get copied to %windir%/system32 or %windir%/system. That's the local context that win.com switches to after it gets run. If it's in there, it will be found immediately, at condition 2 cited earlier.
If it cant find it there, it will check the path.
LATER in the startup process, when user32 and pals get started, and the user space and shell get started, then things in the RUN registry key fire.
By this time, the windows paths are appended already.
What I asked you to check was:
Can you find any program or dll named 'xit'?
(For instance, looking using dir from dos:)
C:
cd \
dir xit.* /s
Then looking for output on where it's found.
If such a thing is found (xit.com, xit.exe, xit.bat, xit.vxd, xit.dll), note the path it resides at.
Is that path inside the path variable?
If it is not, ADD that path to the variable.