[mapguide-commits] r5872 - in trunk/Tools: . MgInstantSetup MgInstantSetup/InstantSetup MgInstantSetup/InstantSetup/Properties MgInstantSetup/InstantSetup.Core MgInstantSetup/InstantSetup.Core/Properties MgInstantSetup/InstantSetup.Core/Resources

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Mon May 30 09:51:56 EDT 2011


Author: jng
Date: 2011-05-30 06:51:56 -0700 (Mon, 30 May 2011)
New Revision: 5872

Added:
   trunk/Tools/MgInstantSetup/
   trunk/Tools/MgInstantSetup/InstantSetup.Core/
   trunk/Tools/MgInstantSetup/InstantSetup.Core/AbstractSetupConfigurationProcess.cs
   trunk/Tools/MgInstantSetup/InstantSetup.Core/ApacheSetupConfigurationProcess.cs
   trunk/Tools/MgInstantSetup/InstantSetup.Core/IISSetupConfigurationProcess.cs
   trunk/Tools/MgInstantSetup/InstantSetup.Core/IniFile.cs
   trunk/Tools/MgInstantSetup/InstantSetup.Core/InstantSetup.Core.csproj
   trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/
   trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/AssemblyInfo.cs
   trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.Designer.cs
   trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.resx
   trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/
   trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/APACHE_WEB.txt
   trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/SERVER.txt
   trunk/Tools/MgInstantSetup/InstantSetup.Core/app.config
   trunk/Tools/MgInstantSetup/InstantSetup/
   trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.Designer.cs
   trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.cs
   trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.resx
   trunk/Tools/MgInstantSetup/InstantSetup/Form1.Designer.cs
   trunk/Tools/MgInstantSetup/InstantSetup/Form1.cs
   trunk/Tools/MgInstantSetup/InstantSetup/Form1.resx
   trunk/Tools/MgInstantSetup/InstantSetup/IConfigurationView.cs
   trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.Designer.cs
   trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.cs
   trunk/Tools/MgInstantSetup/InstantSetup/InstantSetup.csproj
   trunk/Tools/MgInstantSetup/InstantSetup/Program.cs
   trunk/Tools/MgInstantSetup/InstantSetup/Properties/
   trunk/Tools/MgInstantSetup/InstantSetup/Properties/AssemblyInfo.cs
   trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.Designer.cs
   trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.resx
   trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.Designer.cs
   trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.settings
   trunk/Tools/MgInstantSetup/InstantSetup/app.config
   trunk/Tools/MgInstantSetup/MgInstantSetup.sln
   trunk/Tools/MgInstantSetup/MgInstantSetup.suo
Log:
#1608: Initial import of MgInstantSetup utility. Works with a freshly prepared build of MGOS 2.2

Added: trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.Designer.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.Designer.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,310 @@
+namespace InstantSetup
+{
+    partial class ApacheConfigCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.numSitePort = new System.Windows.Forms.NumericUpDown();
+            this.numClientPort = new System.Windows.Forms.NumericUpDown();
+            this.numAdminPort = new System.Windows.Forms.NumericUpDown();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label1 = new System.Windows.Forms.Label();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.numHttpdPort = new System.Windows.Forms.NumericUpDown();
+            this.label6 = new System.Windows.Forms.Label();
+            this.txtVirtualDirectory = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.numTomcatPort = new System.Windows.Forms.NumericUpDown();
+            this.label5 = new System.Windows.Forms.Label();
+            this.chkEnableJava = new System.Windows.Forms.CheckBox();
+            this.txtServiceName = new System.Windows.Forms.TextBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.groupBox1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numSitePort)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.numClientPort)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.numAdminPort)).BeginInit();
+            this.groupBox2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numHttpdPort)).BeginInit();
+            this.groupBox3.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numTomcatPort)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox1.Controls.Add(this.numSitePort);
+            this.groupBox1.Controls.Add(this.numClientPort);
+            this.groupBox1.Controls.Add(this.numAdminPort);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Location = new System.Drawing.Point(4, 4);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(440, 115);
+            this.groupBox1.TabIndex = 0;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Port Numbers";
+            // 
+            // numSitePort
+            // 
+            this.numSitePort.Location = new System.Drawing.Point(154, 78);
+            this.numSitePort.Maximum = new decimal(new int[] {
+            65536,
+            0,
+            0,
+            0});
+            this.numSitePort.Name = "numSitePort";
+            this.numSitePort.Size = new System.Drawing.Size(120, 20);
+            this.numSitePort.TabIndex = 5;
+            this.numSitePort.ValueChanged += new System.EventHandler(this.numSitePort_ValueChanged);
+            // 
+            // numClientPort
+            // 
+            this.numClientPort.Location = new System.Drawing.Point(154, 52);
+            this.numClientPort.Maximum = new decimal(new int[] {
+            65536,
+            0,
+            0,
+            0});
+            this.numClientPort.Name = "numClientPort";
+            this.numClientPort.Size = new System.Drawing.Size(120, 20);
+            this.numClientPort.TabIndex = 4;
+            this.numClientPort.ValueChanged += new System.EventHandler(this.numClientPort_ValueChanged);
+            // 
+            // numAdminPort
+            // 
+            this.numAdminPort.Location = new System.Drawing.Point(154, 26);
+            this.numAdminPort.Maximum = new decimal(new int[] {
+            65536,
+            0,
+            0,
+            0});
+            this.numAdminPort.Name = "numAdminPort";
+            this.numAdminPort.Size = new System.Drawing.Size(120, 20);
+            this.numAdminPort.TabIndex = 3;
+            this.numAdminPort.ValueChanged += new System.EventHandler(this.numAdminPort_ValueChanged);
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(23, 80);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(87, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Site Connections";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(23, 54);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(95, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Client Connections";
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(23, 26);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(98, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Admin Connections";
+            // 
+            // groupBox2
+            // 
+            this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox2.Controls.Add(this.txtServiceName);
+            this.groupBox2.Controls.Add(this.label7);
+            this.groupBox2.Controls.Add(this.numHttpdPort);
+            this.groupBox2.Controls.Add(this.label6);
+            this.groupBox2.Controls.Add(this.txtVirtualDirectory);
+            this.groupBox2.Controls.Add(this.label4);
+            this.groupBox2.Location = new System.Drawing.Point(4, 126);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(440, 114);
+            this.groupBox2.TabIndex = 1;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "General";
+            // 
+            // numHttpdPort
+            // 
+            this.numHttpdPort.Location = new System.Drawing.Point(154, 51);
+            this.numHttpdPort.Maximum = new decimal(new int[] {
+            65536,
+            0,
+            0,
+            0});
+            this.numHttpdPort.Name = "numHttpdPort";
+            this.numHttpdPort.Size = new System.Drawing.Size(120, 20);
+            this.numHttpdPort.TabIndex = 9;
+            this.numHttpdPort.ValueChanged += new System.EventHandler(this.numHttpdPort_ValueChanged);
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(23, 53);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(93, 13);
+            this.label6.TabIndex = 8;
+            this.label6.Text = "httpd Port Number";
+            // 
+            // txtVirtualDirectory
+            // 
+            this.txtVirtualDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtVirtualDirectory.Location = new System.Drawing.Point(154, 25);
+            this.txtVirtualDirectory.Name = "txtVirtualDirectory";
+            this.txtVirtualDirectory.Size = new System.Drawing.Size(236, 20);
+            this.txtVirtualDirectory.TabIndex = 1;
+            this.txtVirtualDirectory.TextChanged += new System.EventHandler(this.txtVirtualDirectory_TextChanged);
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(23, 28);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(112, 13);
+            this.label4.TabIndex = 0;
+            this.label4.Text = "Virtual Directory Name";
+            // 
+            // groupBox3
+            // 
+            this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.groupBox3.Controls.Add(this.chkEnableJava);
+            this.groupBox3.Controls.Add(this.numTomcatPort);
+            this.groupBox3.Controls.Add(this.label5);
+            this.groupBox3.Location = new System.Drawing.Point(4, 246);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Size = new System.Drawing.Size(440, 106);
+            this.groupBox3.TabIndex = 2;
+            this.groupBox3.TabStop = false;
+            // 
+            // numTomcatPort
+            // 
+            this.numTomcatPort.Location = new System.Drawing.Point(154, 29);
+            this.numTomcatPort.Maximum = new decimal(new int[] {
+            65536,
+            0,
+            0,
+            0});
+            this.numTomcatPort.Name = "numTomcatPort";
+            this.numTomcatPort.Size = new System.Drawing.Size(120, 20);
+            this.numTomcatPort.TabIndex = 7;
+            this.numTomcatPort.ValueChanged += new System.EventHandler(this.numTomcatPort_ValueChanged);
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(23, 31);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(105, 13);
+            this.label5.TabIndex = 6;
+            this.label5.Text = "Tomcat Port Number";
+            // 
+            // chkEnableJava
+            // 
+            this.chkEnableJava.AutoSize = true;
+            this.chkEnableJava.Location = new System.Drawing.Point(6, 0);
+            this.chkEnableJava.Name = "chkEnableJava";
+            this.chkEnableJava.Size = new System.Drawing.Size(85, 17);
+            this.chkEnableJava.TabIndex = 0;
+            this.chkEnableJava.Text = "Enable Java";
+            this.chkEnableJava.UseVisualStyleBackColor = true;
+            // 
+            // txtServiceName
+            // 
+            this.txtServiceName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtServiceName.Location = new System.Drawing.Point(154, 77);
+            this.txtServiceName.Name = "txtServiceName";
+            this.txtServiceName.Size = new System.Drawing.Size(236, 20);
+            this.txtServiceName.TabIndex = 11;
+            this.txtServiceName.TextChanged += new System.EventHandler(this.txtServiceName_TextChanged);
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(23, 80);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(74, 13);
+            this.label7.TabIndex = 10;
+            this.label7.Text = "Service Name";
+            // 
+            // ApacheConfigCtrl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.groupBox3);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "ApacheConfigCtrl";
+            this.Size = new System.Drawing.Size(447, 355);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numSitePort)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.numClientPort)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.numAdminPort)).EndInit();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numHttpdPort)).EndInit();
+            this.groupBox3.ResumeLayout(false);
+            this.groupBox3.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.numTomcatPort)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.NumericUpDown numSitePort;
+        private System.Windows.Forms.NumericUpDown numClientPort;
+        private System.Windows.Forms.NumericUpDown numAdminPort;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.TextBox txtVirtualDirectory;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.GroupBox groupBox3;
+        private System.Windows.Forms.CheckBox chkEnableJava;
+        private System.Windows.Forms.NumericUpDown numTomcatPort;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.NumericUpDown numHttpdPort;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.TextBox txtServiceName;
+        private System.Windows.Forms.Label label7;
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,98 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using InstantSetup.Core;
+
+namespace InstantSetup
+{
+    public partial class ApacheConfigCtrl : UserControl, IConfigurationView
+    {
+        public ApacheConfigCtrl()
+        {
+            InitializeComponent();
+            var apacheConf = new ApacheSetupConfigurationProcess();
+            this.Config = apacheConf;
+
+            numAdminPort.Value = apacheConf.ServerAdminPort;
+            numClientPort.Value = apacheConf.ServerClientPort;
+            numSitePort.Value = apacheConf.ServerSitePort;
+
+            txtVirtualDirectory.Text = apacheConf.VirtualDirectoryName;
+            numHttpdPort.Value = apacheConf.ApachePortNumber;
+            txtServiceName.Text = apacheConf.HttpdServiceName;
+
+            chkEnableJava.Checked = apacheConf.EnableJava;
+            numTomcatPort.Value = apacheConf.TomcatPortNumber;
+        }
+
+        private ApacheSetupConfigurationProcess ApacheConfig { get { return (ApacheSetupConfigurationProcess)this.Config; } }
+
+        public AbstractSetupConfigurationProcess Config
+        {
+            get;
+            private set;
+        }
+
+        public Control Wrapper
+        {
+            get { return this; }
+        }
+
+        private void numAdminPort_ValueChanged(object sender, EventArgs e)
+        {
+            this.Config.ServerAdminPort = Convert.ToInt32(numAdminPort.Value);   
+        }
+
+        private void numClientPort_ValueChanged(object sender, EventArgs e)
+        {
+            this.Config.ServerClientPort = Convert.ToInt32(numClientPort.Value);
+        }
+
+        private void numSitePort_ValueChanged(object sender, EventArgs e)
+        {
+            this.Config.ServerSitePort = Convert.ToInt32(numSitePort.Value);
+        }
+
+        private void numHttpdPort_ValueChanged(object sender, EventArgs e)
+        {
+            ApacheConfig.ApachePortNumber = Convert.ToInt32(numHttpdPort.Value);
+        }
+
+        private void numTomcatPort_ValueChanged(object sender, EventArgs e)
+        {
+            ApacheConfig.TomcatPortNumber = Convert.ToInt32(numTomcatPort.Value);
+        }
+
+        private void txtVirtualDirectory_TextChanged(object sender, EventArgs e)
+        {
+            ApacheConfig.VirtualDirectoryName = txtVirtualDirectory.Text;
+        }
+
+        private void txtServiceName_TextChanged(object sender, EventArgs e)
+        {
+            ApacheConfig.HttpdServiceName = txtServiceName.Text;
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.resx
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.resx	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/ApacheConfigCtrl.resx	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup/Form1.Designer.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Form1.Designer.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Form1.Designer.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,212 @@
+namespace InstantSetup
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.btnConfigure = new System.Windows.Forms.Button();
+            this.tabControl1 = new System.Windows.Forms.TabControl();
+            this.TAB_APACHE = new System.Windows.Forms.TabPage();
+            this.label1 = new System.Windows.Forms.Label();
+            this.txtServiceName = new System.Windows.Forms.TextBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtSourceDirectory = new System.Windows.Forms.TextBox();
+            this.btnSourceDir = new System.Windows.Forms.Button();
+            this.chkInstallServices = new System.Windows.Forms.CheckBox();
+            this.folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
+            this.button1 = new System.Windows.Forms.Button();
+            this.txtBatchOutput = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.tabControl1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // btnConfigure
+            // 
+            this.btnConfigure.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnConfigure.Location = new System.Drawing.Point(465, 464);
+            this.btnConfigure.Name = "btnConfigure";
+            this.btnConfigure.Size = new System.Drawing.Size(75, 23);
+            this.btnConfigure.TabIndex = 0;
+            this.btnConfigure.Text = "Configure";
+            this.btnConfigure.UseVisualStyleBackColor = true;
+            this.btnConfigure.Click += new System.EventHandler(this.btnConfigure_Click);
+            // 
+            // tabControl1
+            // 
+            this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.tabControl1.Controls.Add(this.TAB_APACHE);
+            this.tabControl1.Location = new System.Drawing.Point(13, 87);
+            this.tabControl1.Name = "tabControl1";
+            this.tabControl1.SelectedIndex = 0;
+            this.tabControl1.Size = new System.Drawing.Size(527, 371);
+            this.tabControl1.TabIndex = 1;
+            // 
+            // TAB_APACHE
+            // 
+            this.TAB_APACHE.Location = new System.Drawing.Point(4, 22);
+            this.TAB_APACHE.Name = "TAB_APACHE";
+            this.TAB_APACHE.Padding = new System.Windows.Forms.Padding(3);
+            this.TAB_APACHE.Size = new System.Drawing.Size(519, 345);
+            this.TAB_APACHE.TabIndex = 1;
+            this.TAB_APACHE.Text = "Apache";
+            this.TAB_APACHE.UseVisualStyleBackColor = true;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(14, 64);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(126, 13);
+            this.label1.TabIndex = 2;
+            this.label1.Text = "MapGuide Service Name";
+            // 
+            // txtServiceName
+            // 
+            this.txtServiceName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtServiceName.Location = new System.Drawing.Point(156, 61);
+            this.txtServiceName.Name = "txtServiceName";
+            this.txtServiceName.Size = new System.Drawing.Size(380, 20);
+            this.txtServiceName.TabIndex = 3;
+            this.txtServiceName.TextChanged += new System.EventHandler(this.txtServiceName_TextChanged);
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(14, 12);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(86, 13);
+            this.label2.TabIndex = 4;
+            this.label2.Text = "Source Directory";
+            // 
+            // txtSourceDirectory
+            // 
+            this.txtSourceDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtSourceDirectory.Location = new System.Drawing.Point(156, 9);
+            this.txtSourceDirectory.Name = "txtSourceDirectory";
+            this.txtSourceDirectory.Size = new System.Drawing.Size(345, 20);
+            this.txtSourceDirectory.TabIndex = 5;
+            this.txtSourceDirectory.TextChanged += new System.EventHandler(this.txtSourceDirectory_TextChanged);
+            // 
+            // btnSourceDir
+            // 
+            this.btnSourceDir.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnSourceDir.Location = new System.Drawing.Point(507, 7);
+            this.btnSourceDir.Name = "btnSourceDir";
+            this.btnSourceDir.Size = new System.Drawing.Size(29, 23);
+            this.btnSourceDir.TabIndex = 6;
+            this.btnSourceDir.Text = "...";
+            this.btnSourceDir.UseVisualStyleBackColor = true;
+            this.btnSourceDir.Click += new System.EventHandler(this.btnSourceDir_Click);
+            // 
+            // chkInstallServices
+            // 
+            this.chkInstallServices.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.chkInstallServices.AutoSize = true;
+            this.chkInstallServices.Location = new System.Drawing.Point(13, 468);
+            this.chkInstallServices.Name = "chkInstallServices";
+            this.chkInstallServices.Size = new System.Drawing.Size(97, 17);
+            this.chkInstallServices.TabIndex = 7;
+            this.chkInstallServices.Text = "Install Services";
+            this.chkInstallServices.UseVisualStyleBackColor = true;
+            this.chkInstallServices.CheckedChanged += new System.EventHandler(this.chkInstallServices_CheckedChanged);
+            // 
+            // button1
+            // 
+            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.button1.Location = new System.Drawing.Point(507, 33);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(29, 23);
+            this.button1.TabIndex = 10;
+            this.button1.Text = "...";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // txtBatchOutput
+            // 
+            this.txtBatchOutput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtBatchOutput.Location = new System.Drawing.Point(156, 35);
+            this.txtBatchOutput.Name = "txtBatchOutput";
+            this.txtBatchOutput.Size = new System.Drawing.Size(345, 20);
+            this.txtBatchOutput.TabIndex = 9;
+            this.txtBatchOutput.TextChanged += new System.EventHandler(this.txtBatchOutput_TextChanged);
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(14, 38);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(134, 13);
+            this.label3.TabIndex = 8;
+            this.label3.Text = "Batch File Output Directory";
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(552, 499);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.txtBatchOutput);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.chkInstallServices);
+            this.Controls.Add(this.btnSourceDir);
+            this.Controls.Add(this.txtSourceDirectory);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.txtServiceName);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.tabControl1);
+            this.Controls.Add(this.btnConfigure);
+            this.Name = "Form1";
+            this.Text = "MapGuide Instant Setup";
+            this.tabControl1.ResumeLayout(false);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button btnConfigure;
+        private System.Windows.Forms.TabControl tabControl1;
+        private System.Windows.Forms.TabPage TAB_APACHE;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.TextBox txtServiceName;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtSourceDirectory;
+        private System.Windows.Forms.Button btnSourceDir;
+        private System.Windows.Forms.CheckBox chkInstallServices;
+        private System.Windows.Forms.FolderBrowserDialog folderBrowser;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.TextBox txtBatchOutput;
+        private System.Windows.Forms.Label label3;
+    }
+}
+

Added: trunk/Tools/MgInstantSetup/InstantSetup/Form1.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Form1.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Form1.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,96 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace InstantSetup
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+            _apacheConf = new ApacheConfigCtrl();
+
+            txtServiceName.Text = "MapGuide Server Trunk";
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            _apacheConf.Wrapper.Dock = DockStyle.Fill;
+            TAB_APACHE.Controls.Add(_apacheConf.Wrapper);
+        }
+
+        private IConfigurationView _apacheConf;
+
+        private void btnSourceDir_Click(object sender, EventArgs e)
+        {
+            if (folderBrowser.ShowDialog() == DialogResult.OK)
+            {
+                txtSourceDirectory.Text = folderBrowser.SelectedPath;
+            }
+        }
+
+        private void txtSourceDirectory_TextChanged(object sender, EventArgs e)
+        {
+            _apacheConf.Config.BuildOutputPath = txtSourceDirectory.Text;
+        }
+
+        private void txtBatchOutput_TextChanged(object sender, EventArgs e)
+        {
+            _apacheConf.Config.BatchFileOutputDirectory = txtBatchOutput.Text;
+        }
+
+        private void txtServiceName_TextChanged(object sender, EventArgs e)
+        {
+            _apacheConf.Config.MapGuideServiceName = txtServiceName.Text;
+        }
+
+        private void chkInstallServices_CheckedChanged(object sender, EventArgs e)
+        {
+            _apacheConf.Config.InstallServices = chkInstallServices.Checked;
+        }
+
+        private void btnConfigure_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                _apacheConf.Config.Execute();
+                MessageBox.Show("Configured");
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.ToString());
+            }
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            if (folderBrowser.ShowDialog() == DialogResult.OK)
+            {
+                txtBatchOutput.Text = folderBrowser.SelectedPath;
+            }
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/Form1.resx
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Form1.resx	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Form1.resx	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="folderBrowser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup/IConfigurationView.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/IConfigurationView.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/IConfigurationView.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,33 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using InstantSetup.Core;
+using System.Windows.Forms;
+
+namespace InstantSetup
+{
+    public interface IConfigurationView
+    {
+        AbstractSetupConfigurationProcess Config { get; }
+
+        Control Wrapper { get; }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.Designer.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.Designer.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.Designer.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,37 @@
+namespace InstantSetup
+{
+    partial class IISConfigCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+        }
+
+        #endregion
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/IISConfigCtrl.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,49 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using InstantSetup.Core;
+
+namespace InstantSetup
+{
+    public partial class IISConfigCtrl : UserControl, IConfigurationView
+    {
+        public IISConfigCtrl()
+        {
+            InitializeComponent();
+            this.Config = new IISSetupConfigurationProcess();
+        }
+
+        public AbstractSetupConfigurationProcess Config
+        {
+            get;
+            private set;
+        }
+
+        public Control Wrapper
+        {
+            get { return this; }
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/InstantSetup.csproj
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/InstantSetup.csproj	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/InstantSetup.csproj	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{72CDEB87-1ED2-4177-8C00-962E79F36CA6}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InstantSetup</RootNamespace>
+    <AssemblyName>InstantSetup</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkSubset>
+    </TargetFrameworkSubset>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ApacheConfigCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ApacheConfigCtrl.Designer.cs">
+      <DependentUpon>ApacheConfigCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IConfigurationView.cs" />
+    <Compile Include="IISConfigCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IISConfigCtrl.Designer.cs">
+      <DependentUpon>IISConfigCtrl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="ApacheConfigCtrl.resx">
+      <DependentUpon>ApacheConfigCtrl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\InstantSetup.Core\InstantSetup.Core.csproj">
+      <Project>{70F74850-DC74-431E-993D-8200E13B026A}</Project>
+      <Name>InstantSetup.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup/Program.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Program.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Program.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,38 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace InstantSetup
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Properties/AssemblyInfo.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("InstantSetup")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InstantSetup")]
+[assembly: AssemblyCopyright("Copyright ©  2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("19d7e671-753d-4b9a-921e-119d420ee116")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.Designer.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.Designer.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4952
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace InstantSetup.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("InstantSetup.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.resx
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.resx	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Properties/Resources.resx	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.Designer.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.Designer.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.Designer.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4952
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace InstantSetup.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.settings
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.settings	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/Properties/Settings.settings	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

Added: trunk/Tools/MgInstantSetup/InstantSetup/app.config
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup/app.config	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup/app.config	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<configuration>
+<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/AbstractSetupConfigurationProcess.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/AbstractSetupConfigurationProcess.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/AbstractSetupConfigurationProcess.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,268 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Globalization;
+
+namespace InstantSetup.Core
+{
+    public enum ApiType
+    {
+        Php,
+        Java,
+        DotNet
+    }
+
+    /// <summary>
+    /// Base configuration setup process
+    /// </summary>
+    public abstract class AbstractSetupConfigurationProcess
+    {
+        protected AbstractSetupConfigurationProcess()
+        {
+            this.EnablePhp = true;
+
+            //Port numbers specified not to intentionally clash with an existing 
+            //MGOS installation
+            this.ServerAdminPort = 2820;
+            this.ServerClientPort = 2821;
+            this.ServerSitePort = 2822;
+        }
+
+        public string BatchFileOutputDirectory { get; set; }
+
+        public string MapGuideServiceName { get; set; }
+
+        public bool InstallServices { get; set; }
+
+        public string BackupConfigPath { get; set; }
+
+        public bool BackupConfigFiles { get; set; }
+
+        /// <summary>
+        /// Gets or sets the build output path where the result of build.bat
+        /// in the MapGuide Source root copies files to 
+        /// </summary>
+        public string BuildOutputPath { get; set; }
+
+        /// <summary>
+        /// The server bin directory
+        /// </summary>
+        public virtual string ServerBinDir
+        {
+            get
+            {
+                return Path.Combine(ServerRootDir, "bin");
+            }
+        }
+
+        /// <summary>
+        /// The server tier root directory
+        /// </summary>
+        public virtual string ServerRootDir
+        {
+            get { return Path.Combine(BuildOutputPath, "Server"); }
+        }
+
+        /// <summary>
+        /// The CS-Map Dictionary directory
+        /// </summary>
+        public virtual string CsMapDictionaryDir
+        {
+            get { return Path.Combine(BuildOutputPath, "CS-Map\\Dictionaries"); }
+        }
+
+        /// <summary>
+        /// The www directory of the web tier
+        /// </summary>
+        public virtual string WebTierPublicDir
+        {
+            get { return Path.Combine(WebTierRootDir, "www"); }
+        }
+
+        /// <summary>
+        /// The web tier root directory
+        /// </summary>
+        public virtual string WebTierRootDir
+        {
+            get
+            {
+                return Path.Combine(BuildOutputPath, "Web");
+            }
+        }
+
+        /// <summary>
+        /// The mapagent directory of the web tier
+        /// </summary>
+        public virtual string WebTierMapAgentDir
+        {
+            get { return Path.Combine(WebTierPublicDir, "mapagent"); }
+        }
+
+        /// <summary>
+        /// The PHP web tier directory
+        /// </summary>
+        public virtual string WebTierPhpDir
+        {
+            get
+            {
+                return Path.Combine(WebTierRootDir, "Php");
+            }
+        }
+
+        public bool EnablePhp { get; set; }
+
+        /// <summary>
+        /// The name of the mapguide virtual directory to create
+        /// </summary>
+        public string VirtualDirectoryName { get; set; }
+
+        /// <summary>
+        /// TCP/IP number for client operations
+        /// </summary>
+        public int ServerClientPort { get; set; }
+
+        /// <summary>
+        /// TCP/IP number for admin operations
+        /// </summary>
+        public int ServerAdminPort { get; set; }
+
+        /// <summary>
+        /// TCP/IP number for port operations
+        /// </summary>
+        public int ServerSitePort { get; set; }
+
+        private IniFile _serverConfig;
+        private IniFile _webConfig;
+        private IniFile _phpConfig;
+
+        public void Execute()
+        {
+            ValidateConfigSettings();
+
+            if (this.BackupConfigFiles)
+            {
+                if (string.IsNullOrEmpty(this.BackupConfigPath))
+                    throw new InvalidOperationException("Please specify a backup path for config files");
+                else
+                {
+                    if (!Directory.Exists(this.BackupConfigPath))
+                        Directory.CreateDirectory(this.BackupConfigPath);
+
+                    DoBackupConfigFiles();
+                }
+            }
+
+            //Process serverconfig.ini
+
+            string serverConfigIni = Path.Combine(this.ServerBinDir, "serverconfig.ini");
+            if (!File.Exists(serverConfigIni))
+                throw new InvalidOperationException("Could not find expected file: " + serverConfigIni);
+
+            string webConfigIni = Path.Combine(this.WebTierPublicDir, "webconfig.ini");
+            if (!File.Exists(webConfigIni))
+                throw new InvalidOperationException("Could not find expected file: " + webConfigIni);
+
+            string phpIni = Path.Combine(this.WebTierPhpDir, "php.ini");
+            if (!File.Exists(phpIni))
+                throw new InvalidOperationException("Could not find expected file: " + phpIni);
+
+            _serverConfig = new IniFile(serverConfigIni);
+            _webConfig = new IniFile(webConfigIni);
+            _phpConfig = new IniFile(phpIni);
+
+            SetServerConfigProperties();
+            SetWebConfigProperties();
+            SetPhpConfigProperties();
+
+            ConfigureWebServer();
+
+            if (this.InstallServices)
+            {
+                throw new NotImplementedException("Service installation not implemented");
+            }
+            else
+            {
+                //Write server batch file
+                string serverText = string.Format(Properties.Resources.SERVER, this.CsMapDictionaryDir, this.ServerBinDir);
+                File.WriteAllText(Path.Combine(this.BatchFileOutputDirectory, "mgserver.bat"), serverText);
+
+                WriteAdditionalBatchFiles();
+            }
+        }
+
+        protected abstract void WriteAdditionalBatchFiles();
+
+        protected abstract void ValidateConfigSettings();
+
+        protected abstract void ConfigureWebServer();
+
+        private void SetPhpConfigProperties()
+        {
+            _phpConfig.IniWriteValue("PHP", "extension_dir", Path.Combine(this.WebTierPhpDir, "ext"));
+        }
+
+        private void SetWebConfigProperties()
+        {
+            //Port numbers
+            _webConfig.IniWriteValue("AdministrativeConnectionProperties","Port",this.ServerAdminPort.ToString(CultureInfo.InvariantCulture));
+            _webConfig.IniWriteValue("ClientConnectionProperties","Port",this.ServerClientPort.ToString(CultureInfo.InvariantCulture));
+            _webConfig.IniWriteValue("SiteConnectionProperties","Port",this.ServerSitePort.ToString(CultureInfo.InvariantCulture));
+
+            _webConfig.IniWriteValue("GeneralProperties","ResourcesPath",Path.Combine(this.WebTierMapAgentDir, "Resources"));
+            _webConfig.IniWriteValue("GeneralProperties","TempPath",Path.Combine(this.WebTierRootDir, "Logs"));
+
+            _webConfig.IniWriteValue("SiteConnectionProperties","IpAddress","127.0.0.1");
+
+            _webConfig.IniWriteValue("WebApplicationProperties","TemplateRootFolder",Path.Combine(this.WebTierRootDir, "fusion\\templates\\mapguide"));
+            _webConfig.IniWriteValue("WebApplicationProperties","WidgetInfoFolder",Path.Combine(this.WebTierRootDir, "fusion\\widgets\\widgetinfo"));
+            _webConfig.IniWriteValue("WebApplicationProperties", "ContainerInfoFolder", Path.Combine(this.WebTierRootDir, "fusion\\containerinfo"));
+        }
+
+        private void SetServerConfigProperties()
+        {
+            //Port numbers
+            _serverConfig.IniWriteValue("AdministrativeConnectionProperties","Port",this.ServerAdminPort.ToString(CultureInfo.InvariantCulture));
+            _serverConfig.IniWriteValue("ClientConnectionProperties","Port",this.ServerClientPort.ToString(CultureInfo.InvariantCulture));
+            _serverConfig.IniWriteValue("SiteConnectionProperties","Port",this.ServerSitePort.ToString(CultureInfo.InvariantCulture));
+
+            _serverConfig.IniWriteValue("GeneralProperties","LogsPath",Path.Combine(ServerRootDir, "Logs"));
+
+            _serverConfig.IniWriteValue("GeneralProperties","TempPath",Path.Combine(ServerRootDir, "Temp"));
+            _serverConfig.IniWriteValue("GeneralProperties","ResourcesPath",Path.Combine(ServerRootDir, "Resources"));
+            _serverConfig.IniWriteValue("GeneralProperties","WfsDocumentPath",Path.Combine(ServerRootDir, "Wfs"));
+            _serverConfig.IniWriteValue("GeneralProperties","WmsDocumentPath",Path.Combine(ServerRootDir, "Wms"));
+            _serverConfig.IniWriteValue("GeneralProperties","FdoPath",Path.Combine(ServerRootDir, "Fdo"));
+            
+            _serverConfig.IniWriteValue("ResourceServiceProperties","PackagesPath",Path.Combine(ServerRootDir, "Packages"));
+
+            _serverConfig.IniWriteValue("ResourceServiceProperties","LibraryRepositoryPath",Path.Combine(ServerRootDir, "Repositories\\Library"));
+            _serverConfig.IniWriteValue("ResourceServiceProperties","LibraryResourcesDataFilePath",Path.Combine(ServerRootDir, "Repositories\\DataFiles"));
+            _serverConfig.IniWriteValue("ResourceServiceProperties","SessionRepositoryPath",Path.Combine(ServerRootDir, "Repositories\\Session"));
+            _serverConfig.IniWriteValue("ResourceServiceProperties","SessionResourceDataPath",Path.Combine(ServerRootDir, "Repositories\\Session\\DataFiles"));
+            _serverConfig.IniWriteValue("ResourceServiceProperties","SiteRepositoryPath",Path.Combine(ServerRootDir, "Repositories\\Site"));
+            _serverConfig.IniWriteValue("ResourceServiceProperties","TileCachePath",Path.Combine(ServerRootDir, "Repositories\\TileCache"));
+            _serverConfig.IniWriteValue("ResourceServiceProperties", "ResourceSchemaFilePath", Path.Combine(ServerRootDir, "Schema"));
+        }
+
+        protected abstract void DoBackupConfigFiles();
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/ApacheSetupConfigurationProcess.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/ApacheSetupConfigurationProcess.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/ApacheSetupConfigurationProcess.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,124 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Globalization;
+
+namespace InstantSetup.Core
+{
+    public class ApacheSetupConfigurationProcess : AbstractSetupConfigurationProcess
+    {
+        public ApacheSetupConfigurationProcess()
+            : base()
+        {
+            this.HttpdServiceName = "ApacheMapGuideTrunk";
+            this.ApachePortNumber = 8018;
+            this.TomcatPortNumber = 8019;
+
+            this.VirtualDirectoryName = "mapguide";
+            this.HttpdServiceName = "ApacheMapGuide";
+        }
+
+        public bool EnableJava { get; set; }
+
+        /// <summary>
+        /// The port number that Apache Tomcat will run under. Only applies if 
+        /// java is enabled and is required if EnableJava = true
+        /// </summary>
+        public int TomcatPortNumber { get; set; }
+
+        public int ApachePortNumber { get; set; }
+
+        public string HttpdServiceName { get; set; }
+
+        public virtual string WebTierApacheDir
+        {
+            get
+            {
+                return Path.Combine(this.WebTierRootDir, "Apache2");
+            }
+        }
+
+        protected override void ValidateConfigSettings()
+        {
+
+        }
+
+        private static string Apachify(string text)
+        {
+            string str = text.Replace("\\", "/");
+            return str.EndsWith("/") ? str : (str + "/");
+        }
+
+        protected override void ConfigureWebServer()
+        {
+            var httpdConf = Path.Combine(this.WebTierApacheDir, "conf\\httpd.conf");
+            var backup = httpdConf + ".instantsetupbak";
+            if (!File.Exists(backup))
+                File.Copy(httpdConf, backup); //This has to be original, so back it up
+            else
+                File.Copy(backup, httpdConf, true); //Restore from original backup
+
+            var httpdBuffer = new StringBuilder(File.ReadAllText(httpdConf));
+
+            httpdBuffer.Replace("%MG_WEB_ROOT%", Apachify(this.WebTierPublicDir));
+            httpdBuffer.Replace("%MG_WEB_PORT%", this.ApachePortNumber.ToString(CultureInfo.InvariantCulture));
+            httpdBuffer.Replace("%MG_WEB_PHP%", Apachify(this.WebTierPhpDir));
+            httpdBuffer.Replace("%MG_WEB_APACHE%", Apachify(this.WebTierApacheDir));
+            httpdBuffer.Replace("%MG_VIRTUAL_DIR%", this.VirtualDirectoryName);
+
+            if (this.EnableJava)
+            {
+                httpdBuffer.Replace("%MG_INCLUDE_TOMCAT%", "Include conf/tomcat.conf");
+                httpdBuffer.Replace("%MG_PHP_API%", "#");
+                httpdBuffer.Replace("%MG_JAVA_API%", "");
+
+                var tomcatConf = Path.Combine(this.WebTierApacheDir, "conf\\tomcat.conf");
+                var tomcatBuffer = new StringBuilder(File.ReadAllText(tomcatConf));
+
+                tomcatBuffer.Replace("%MG_WEB_APACHE%", Apachify(this.WebTierApacheDir));
+                tomcatBuffer.Replace("%MG_VIRTUAL_DIR%", this.VirtualDirectoryName);
+
+                File.WriteAllText(tomcatConf, tomcatBuffer.ToString());
+            }
+            else
+            {
+                httpdBuffer.Replace("%MG_INCLUDE_TOMCAT%", "#Uncomment to enable the Java API\n#Include conf/tomcat.conf");
+                httpdBuffer.Replace("%MG_PHP_API%", "");
+                httpdBuffer.Replace("%MG_JAVA_API%", "#");
+            }
+
+            File.WriteAllText(httpdConf, httpdBuffer.ToString());
+        }
+
+        protected override void DoBackupConfigFiles()
+        {
+            
+        }
+
+        protected override void WriteAdditionalBatchFiles()
+        {
+            //Write httpd batch file
+            string httpdText = string.Format(Properties.Resources.APACHE_WEB, Path.Combine(this.WebTierApacheDir, "bin"));
+            File.WriteAllText(Path.Combine(this.BatchFileOutputDirectory, "mgwebtier.bat"), httpdText);
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/IISSetupConfigurationProcess.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/IISSetupConfigurationProcess.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/IISSetupConfigurationProcess.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,55 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace InstantSetup.Core
+{
+    public class IISSetupConfigurationProcess : AbstractSetupConfigurationProcess
+    {
+        public bool EnableDotNet { get; set; }
+
+        /// <summary>
+        /// Gets whether we are using IIS7 or above. Meaning we can use appcmd.exe
+        /// Otherwise we will use the IIS Admin COM interfaces
+        /// </summary>
+        public bool UsingIIS7 { get; set; }
+
+        protected override void DoBackupConfigFiles()
+        {
+            throw new NotImplementedException();
+        }
+
+        protected override void ValidateConfigSettings()
+        {
+            throw new NotImplementedException();
+        }
+
+        protected override void ConfigureWebServer()
+        {
+            throw new NotImplementedException();
+        }
+
+        protected override void WriteAdditionalBatchFiles()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/IniFile.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/IniFile.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/IniFile.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,96 @@
+#region Disclaimer / License
+// Copyright (C) 2011, Jackie Ng, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace InstantSetup.Core
+{
+    public class IniFile
+    {
+        public string path;
+
+        [DllImport("kernel32")]
+        private static extern long WritePrivateProfileString(string section,
+            string key, string val, string filePath);
+        [DllImport("kernel32")]
+        private static extern int GetPrivateProfileString(string section,
+                 string key, string def, StringBuilder retVal,
+            int size, string filePath);
+
+        /// <summary>
+
+        /// INIFile Constructor.
+
+        /// </summary>
+
+        /// <PARAM name="INIPath"></PARAM>
+
+        public IniFile(string INIPath)
+        {
+            path = INIPath;
+        }
+        /// <summary>
+
+        /// Write Data to the INI File
+
+        /// </summary>
+
+        /// <PARAM name="Section"></PARAM>
+
+        /// Section name
+
+        /// <PARAM name="Key"></PARAM>
+
+        /// Key Name
+
+        /// <PARAM name="Value"></PARAM>
+
+        /// Value Name
+
+        public void IniWriteValue(string Section, string Key, string Value)
+        {
+            WritePrivateProfileString(Section, Key, Value, this.path);
+        }
+
+        /// <summary>
+
+        /// Read Data Value From the Ini File
+
+        /// </summary>
+
+        /// <PARAM name="Section"></PARAM>
+
+        /// <PARAM name="Key"></PARAM>
+
+        /// <PARAM name="Path"></PARAM>
+
+        /// <returns></returns>
+
+        public string IniReadValue(string Section, string Key)
+        {
+            StringBuilder temp = new StringBuilder(255);
+            int i = GetPrivateProfileString(Section, Key, "", temp,
+                                            255, this.path);
+            return temp.ToString();
+
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/InstantSetup.Core.csproj
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/InstantSetup.Core.csproj	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/InstantSetup.Core.csproj	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{70F74850-DC74-431E-993D-8200E13B026A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InstantSetup.Core</RootNamespace>
+    <AssemblyName>InstantSetup.Core</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkSubset>
+    </TargetFrameworkSubset>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AbstractSetupConfigurationProcess.cs" />
+    <Compile Include="ApacheSetupConfigurationProcess.cs" />
+    <Compile Include="IISSetupConfigurationProcess.cs" />
+    <Compile Include="IniFile.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\SERVER.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="Resources\APACHE_WEB.txt" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/AssemblyInfo.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("InstantSetup.Core")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InstantSetup.Core")]
+[assembly: AssemblyCopyright("Copyright ©  2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("845718ec-d69f-4bb2-8fbe-c8f0407bc1d6")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.Designer.cs	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.Designer.cs	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,81 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4952
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace InstantSetup.Core.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("InstantSetup.Core.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to .
+        /// </summary>
+        internal static string APACHE_WEB {
+            get {
+                return ResourceManager.GetString("APACHE_WEB", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to .
+        /// </summary>
+        internal static string SERVER {
+            get {
+                return ResourceManager.GetString("SERVER", resourceCulture);
+            }
+        }
+    }
+}

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.resx
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.resx	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/Properties/Resources.resx	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="APACHE_WEB" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\APACHE_WEB.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="SERVER" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\SERVER.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/APACHE_WEB.txt
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/APACHE_WEB.txt	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/APACHE_WEB.txt	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,3 @@
+pushd {0}
+httpd.exe
+popd
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/SERVER.txt
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/SERVER.txt	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/Resources/SERVER.txt	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,4 @@
+SET MENTOR_DICTIONARY_PATH={0}
+pushd {1}
+mgserver.exe run
+popd
\ No newline at end of file

Added: trunk/Tools/MgInstantSetup/InstantSetup.Core/app.config
===================================================================
--- trunk/Tools/MgInstantSetup/InstantSetup.Core/app.config	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/InstantSetup.Core/app.config	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<configuration>
+<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

Added: trunk/Tools/MgInstantSetup/MgInstantSetup.sln
===================================================================
--- trunk/Tools/MgInstantSetup/MgInstantSetup.sln	                        (rev 0)
+++ trunk/Tools/MgInstantSetup/MgInstantSetup.sln	2011-05-30 13:51:56 UTC (rev 5872)
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InstantSetup.Core", "InstantSetup.Core\InstantSetup.Core.csproj", "{70F74850-DC74-431E-993D-8200E13B026A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InstantSetup", "InstantSetup\InstantSetup.csproj", "{72CDEB87-1ED2-4177-8C00-962E79F36CA6}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{70F74850-DC74-431E-993D-8200E13B026A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{70F74850-DC74-431E-993D-8200E13B026A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{70F74850-DC74-431E-993D-8200E13B026A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{70F74850-DC74-431E-993D-8200E13B026A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{72CDEB87-1ED2-4177-8C00-962E79F36CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{72CDEB87-1ED2-4177-8C00-962E79F36CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{72CDEB87-1ED2-4177-8C00-962E79F36CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{72CDEB87-1ED2-4177-8C00-962E79F36CA6}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

Added: trunk/Tools/MgInstantSetup/MgInstantSetup.suo
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/MgInstantSetup/MgInstantSetup.suo
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream



More information about the mapguide-commits mailing list