PNET on Windows - ideas on registry structure, SDK and runtime

Maciek <[email protected]>
Newsgroups gmane.comp.gnu.dotgnu.developer
Message-ID <[email protected]>
Here are some of my ideas for the near future of PNet on Windows platform.

Registry structure
------------------

This is closely related to my future work on improving coremul.

At the moment, there's no mechanism for finding which PNet 
implementation to use when running assemblies. That's one problem; it 
should be also possible to figure out whether to use PNet, Mono or .NET 
if all those implementations are installed (including their different 
versions!) - I'll elaborate on this at a later time.

Let's start with standardising PNet's registry structure - I think 
registry would be the easiest method to manage different installations.

Here's an example of what I was thinking:

HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET (key)
HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\PreferredVersion (string 
value, e.g. 0.6.2)
HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\CurrentVersion (string 
value, e.g. 0.6.4)

HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\0.6.4 (key)
HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\0.6.4\InstallRoot 
(string val, e.g. "C:\Windows\Portable.NET\0.6.4")

HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\0.6.2 (key)
HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\0.6.2\InstallRoot 
(string val, e.g. "C:\Windows\Portable.NET\0.6.2")

CurrentVersion is set everytime PNet is installed with the official 
installer, as long as version being installed is newer than the latest 
existing version.

PreferredVersion is what the user chooses to use when running 
(double-clicking) .NET apps in Explorer. A simple GUI config can be 
written which allows the user to set their preferred PNet version.

CoreEmul operation:

_CorExeMain is called by app.exe
Read HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\PreferredVersion to v

If (v == NULL) Then:
	Read HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\\CurrentVersion to v
Endif

If (HKEY_LOCAL_MACHINE\Software\DotGNU\Portable.NET\\v exists) Then:
	Read HKEY_LOCAL_MACHINE\Software\DotGNUPortable.NET\\v\InstallRoot to path

	If ("path\bin\ilrun.exe" exists) Then:
		Execute path\bin\ilrun.exe app.exe
	Endif
Endif

(this logic could also be used in clrwrap)

The user may also install PNet for themselves only, in which case 
HKEY_CURRENT_USER can also be used.


Portable.NET Runtime and SDK
----------------------------

I'd suggest splitting PNET for Windows into 2 packages: runtime and SDK. 
The runtime installer can be as small as 3MB (including SWF) and would 
be useful for those who don't want or can't download large files, or for 
software vendors who want to distribute and deploy their .NET 
applications at the lowest possible cost.

The runtime would be installed in C:\Windows\Portable.NET\x.x.x (where 
x.x.x is version no.)

The SDK package will include compilers, libraries and sources, as well 
as GNU sample programs and libraries (Qt#, GTK#, etc.). Easy to use HTML 
or CHM documentation will be included as well. Ideally the SDK will 
feature a Free IDE such as SharpDevelop.

The SDK on the other hand would be installed in C:\Program 
Files\Portable.NET SDK\x.x.x



What do you think? Does putting different versions of PNet into separate 
directories make sense?


Regards,

Maciek Plewa

PS. I'll be changing my email address this week.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.