It's magic. :-) CIL (.NET) executables use the "standard" PE (Portable Executable) format that the rest of Windows uses.
To ensure that you can start a CIL program "normally" (for Windows users), a trick is played. The .EXE has an dependency on another library (not a managed assembly, but a normal Windows DLL installed in %WINDIR%\system32), and sets the program entry-point into a function exported by this DLL (CorExeMain, or something). The end result is that (again, on Windows) the OS loads the EXE, loads all dependent libraries, which (indirectly) loads the .NET runtime, and the .NET runtime takes over the process and starts JITing/executing the CIL code. In essence, the "portable" .EXE/.DLL format has some native X86 code to ensure it works "right" on Windows. Other platforms can (and do!) easily ignore it. Why's an MCS-generated program execute when Mono isn't installed? Because MCS generates programs with the same file header, so that they can be executed under .NET. The only way to keep from executing a program is to un-install both Mono and .NET. - Jon On Tue, 2003-10-28 at 17:50, Richard Thombs wrote: > Well I thought of that, and although I still have it installed, it's > not mentioned in any of the environment variables like PATH etc. > > Are the executables built using Microsoft's CSC somehow aware of the > path to Microsoft's mscorlib.dll? > > R > -----Original Message----- > From: John BouAntoun [mailto:[EMAIL PROTECTED] > Sent: Tuesday, October 28, 2003 2:36 PM > To: Richard Thombs; [EMAIL PROTECTED] > Subject: RE: [Mono-list] Confused! > > > Are you sure that you can uninstall the MS.Net framework after > it's been installed? > > Doesn't it become part of windows? > -----Original Message----- > From: Richard Thombs [mailto:[EMAIL PROTECTED] > Sent: Wednesday, 29 October 2003 9:27 AM > To: [EMAIL PROTECTED] > Subject: [Mono-list] Confused! > > > I just built the mono and mcs trees from scratch under > cygwin. Initially I was having all trouble getting > some stuff to compile because I didn't have any > corlib.dll whatsoever. I solved that by using the .NET > SDK to compile and install it, so I should be happy, > right? > > Well nearly - while trying to repeat the entire build > process so that I can document it, I found that > despite removing every corlib.dll I can find, things > like 'mcs' are still able to execute. I'm confused > because I was expecting to get a missing library > error! I've even gone as far as rebooting so I can be > sure Cygwin isn't caching the DLL in some weird way. > > Am I being stupid or what? Did I imagine the initial > "Can't find corlib.dll" errors or what? > _______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list
