You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2013/10/18 02:25:24 UTC

[02/30] AMBARI-3266. Contribute Ambari-SCOM. (Tom Beerbower via mahadev)

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/AmbariSetupTools/winpkg.utils.psm1
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/AmbariSetupTools/winpkg.utils.psm1 b/contrib/ambari-scom/msi/src/AmbariSetupTools/winpkg.utils.psm1
new file mode 100644
index 0000000..8ff3276
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/AmbariSetupTools/winpkg.utils.psm1
@@ -0,0 +1,273 @@
+### Licensed to the Apache Software Foundation (ASF) under one or more
+### contributor license agreements.  See the NOTICE file distributed with
+### this work for additional information regarding copyright ownership.
+### The ASF licenses this file to You under the Apache License, Version 2.0
+### (the "License"); you may not use this file except in compliance with
+### the License.  You may obtain a copy of the License at
+###
+###     http://www.apache.org/licenses/LICENSE-2.0
+###
+### Unless required by applicable law or agreed to in writing, software
+### distributed under the License is distributed on an "AS IS" BASIS,
+### WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+### See the License for the specific language governing permissions and
+### limitations under the License.
+
+
+### NOTE: This file is common across the Windows installer projects for Hadoop Core, Hive, and Pig.
+### This dependency is currently managed by convention.
+### If you find yourself needing to change something in this file, it's likely that you're
+### either doing something that's more easily done outside this file or is a bigger change
+### that likely has wider ramifications. Work intentionally.
+
+
+param( [parameter( Position=0, Mandatory=$true)]
+       [String]  $ComponentName )
+
+function Write-Log ($message, $level, $pipelineObj )
+{
+    $message = SanitizeString $message
+    switch($level)
+    {
+        "Failure" 
+        {
+            $message = "$ComponentName FAILURE: $message"
+            Write-Error $message 
+            break;
+        }
+
+        "Info"
+        {
+            $message = "${ComponentName}: $message"
+            Write-Host $message
+            break;
+        }
+
+        default
+        {
+            $message = "${ComponentName}: $message"
+            Write-Host "$message"
+        }
+    }
+
+    
+    Out-File -FilePath $ENV:WINPKG_LOG -InputObject "$message" -Append -Encoding "UTF8"
+
+    if( $pipelineObj -ne $null )
+    {
+        Out-File -FilePath $ENV:WINPKG_LOG -InputObject $pipelineObj.InvocationInfo.PositionMessage -Append -Encoding "UTF8"
+    }
+}
+
+function Write-LogRecord( $source, $record )
+{
+    if( $record -is [Management.Automation.ErrorRecord])
+    {
+        $message = "$ComponentName-$source FAILURE: " + $record.Exception.Message
+        $message = SanitizeString $message
+
+        if( $message.EndsWith( [Environment]::NewLine ))
+        {
+            Write-Host $message -NoNewline
+            [IO.File]::AppendAllText( "$ENV:WINPKG_LOG", "$message", [Text.Encoding]::UTF8 )
+        }
+        else
+        {
+            Write-Host $message
+            Out-File -FilePath $ENV:WINPKG_LOG -InputObject $message -Append -Encoding "UTF8"
+        }
+    }
+    else
+    {
+        $message = $record
+        $message = SanitizeString $message
+        Write-Host $message
+        Out-File -FilePath $ENV:WINPKG_LOG -InputObject "$message" -Append -Encoding "UTF8"
+    }
+}
+
+function SanitizeString($s)
+{
+    $s -replace "-password([a-z0-9]*) (\S*)", '-password$1 ****'
+}
+
+function Invoke-Cmd ($command)
+{
+    Write-Log $command
+    $out = cmd.exe /C "$command" 2>&1
+    $out | ForEach-Object { Write-LogRecord "CMD" $_ }
+    return $out
+}
+
+function Invoke-CmdChk ($command)
+{
+    Write-Log $command
+    $out = cmd.exe /C "$command" 2>&1
+    $out | ForEach-Object { Write-LogRecord "CMD" $_ }
+    if (-not ($LastExitCode  -eq 0))
+    {
+        throw "Command `"$out`" failed with exit code $LastExitCode "
+    }
+    return $out
+}
+
+function Invoke-Ps ($command)
+{
+    Write-Log $command
+    $out = powershell.exe -InputFormat none -Command "$command" 2>&1
+    #$out | ForEach-Object { Write-LogRecord "PS" $_ }
+    return $out
+}
+
+function Invoke-PsChk ($command)
+{
+    Write-Log $command
+    $out = powershell.exe -InputFormat none -Command $command 2>&1
+    $captureExitCode = $LastExitCode
+	$out | ForEach-Object { Write-LogRecord "PS" $_ }
+	if (-not ($captureExitCode  -eq 0))
+    {
+        throw "Command `"$command`" failed with exit code  $captureExitCode. Output is  `"$out`" "
+    }
+    return $out
+}
+
+
+function Test-JavaHome
+{
+    if( -not (Test-Path $ENV:JAVA_HOME\bin\java.exe))
+    {
+        throw "JAVA_HOME not set properly; $ENV:JAVA_HOME\bin\java.exe does not exist"
+    }
+}
+
+### Add service control permissions to authenticated users.
+### Reference:
+### http://stackoverflow.com/questions/4436558/start-stop-a-windows-service-from-a-non-administrator-user-account 
+### http://msmvps.com/blogs/erikr/archive/2007/09/26/set-permissions-on-a-specific-service-windows.aspx
+
+function Set-ServiceAcl ($service)
+{
+    $cmd = "sc sdshow $service"
+    $sd = Invoke-Cmd $cmd
+
+    Write-Log "Current SD: $sd"
+
+    ## A;; --- allow
+    ## RP ---- SERVICE_START
+    ## WP ---- SERVICE_STOP
+    ## CR ---- SERVICE_USER_DEFINED_CONTROL    
+    ## ;;;AU - AUTHENTICATED_USERS
+
+    $sd = [String]$sd
+    $sd = $sd.Replace( "S:(", "(A;;RPWPCR;;;AU)S:(" )
+    Write-Log "Modifying SD to: $sd"
+
+    $cmd = "sc sdset $service $sd"
+    Invoke-Cmd $cmd
+}
+
+function Expand-String([string] $source)
+{
+    return $ExecutionContext.InvokeCommand.ExpandString((($source -replace '"', '`"') -replace '''', '`'''))
+}
+
+function Copy-XmlTemplate( [string][parameter( Position=1, Mandatory=$true)] $Source,
+       [string][parameter( Position=2, Mandatory=$true)] $Destination,
+       [hashtable][parameter( Position=3 )] $TemplateBindings = @{} )
+{
+
+    ### Import template bindings
+    Push-Location Variable:
+
+    foreach( $key in $TemplateBindings.Keys )
+    {
+        $value = $TemplateBindings[$key]
+        New-Item -Path $key -Value $ExecutionContext.InvokeCommand.ExpandString( $value ) | Out-Null
+    }
+
+    Pop-Location
+
+    ### Copy and expand
+    $Source = Resolve-Path $Source
+
+    if( Test-Path $Destination -PathType Container )
+    {
+        $Destination = Join-Path $Destination ([IO.Path]::GetFilename( $Source ))
+    }
+
+    $DestinationDir = Resolve-Path (Split-Path $Destination -Parent)
+    $DestinationFilename = [IO.Path]::GetFilename( $Destination )
+    $Destination = Join-Path $DestinationDir $DestinationFilename
+
+    if( $Destination -eq $Source )
+    {
+        throw "Destination $Destination and Source $Source cannot be the same"
+    }
+
+    $template = [IO.File]::ReadAllText( $Source )
+    $expanded = Expand-String( $template )
+    ### Output xml files as ANSI files (same as original)
+    write-output $expanded | out-file -encoding ascii $Destination
+}
+
+# Convenience method for processing command-line credential objects
+# Assumes $credentialsHash is a hash with one of the following being true:
+#  - keys "username" and "password"/"passwordBase64" are set to strings
+#  - key "credentialFilePath" is set to the path of a serialized PSCredential object
+function Get-HadoopUserCredentials($credentialsHash)
+{
+    if($credentialsHash["username"])
+    {
+        Write-Log "Using provided credentials for username $($credentialsHash["username"])" | Out-Null
+        $username = $credentialsHash["username"]
+        if($username -notlike "*\*")
+        {
+            $username = "$ENV:COMPUTERNAME\$username"
+        }
+        if($credentialsHash["passwordBase64"])
+        {
+            $base64Password = $credentialsHash["passwordBase64"]
+            $decoded = [System.Convert]::FromBase64String($base64Password);
+            $decodedPassword = [System.Text.Encoding]::UTF8.GetString($decoded);
+            $securePassword = $decodedPassword | ConvertTo-SecureString -AsPlainText -Force
+        }
+        else
+        {
+            $securePassword = $credentialsHash["password"] | ConvertTo-SecureString -AsPlainText -Force
+        }
+    }
+    else
+    {
+        Write-Log "Reading credentials from $($credentialsHash['credentialFilePath'])" | Out-Null
+        $import = Import-Clixml -Path $credentialsHash["credentialFilePath"]
+        $username = $import.Username
+        $securePassword = $import.Password | ConvertTo-SecureString
+    }
+
+    $creds = New-Object System.Management.Automation.PSCredential $username, $securePassword
+    return $creds
+}
+
+function Check-Drive($path, $message){
+    if($path -cnotlike "*:*"){
+        Write-Warning "Target path doesn't contains drive identifier, checking skipped"
+        return
+    }
+    $pathvolume = $path.Split(":")[0] + ":"
+    if (! (Test-Path ($pathvolume + '\')) ) {
+        throw "Target volume for $message $pathvolume doesn't exist"
+    }
+}
+
+Export-ModuleMember -Function Copy-XmlTemplate
+Export-ModuleMember -Function Get-HadoopUserCredentials
+Export-ModuleMember -Function Initialize-WinpkgEnv
+Export-ModuleMember -Function Initialize-InstallationEnv
+Export-ModuleMember -Function Invoke-Cmd
+Export-ModuleMember -Function Invoke-CmdChk
+Export-ModuleMember -Function Invoke-Ps
+Export-ModuleMember -Function Invoke-PsChk
+Export-ModuleMember -Function Set-ServiceAcl
+Export-ModuleMember -Function Test-JavaHome
+Export-ModuleMember -Function Write-Log

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/App.config
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/App.config b/contrib/ambari-scom/msi/src/GUI/App.config
new file mode 100644
index 0000000..58f0a29
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/App.config
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+     http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. -->
+
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+</configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Form1.Designer.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Form1.Designer.cs b/contrib/ambari-scom/msi/src/GUI/Form1.Designer.cs
new file mode 100644
index 0000000..df3168a
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Form1.Designer.cs
@@ -0,0 +1,352 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+namespace GUI_Ambari
+{
+    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.Install = new System.Windows.Forms.Button();
+            this.AID = new System.Windows.Forms.TextBox();
+            this.Browse = new System.Windows.Forms.Button();
+            this.Sname = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.asda = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.Sport = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.Slogin = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.Spassword = new System.Windows.Forms.TextBox();
+            this.Cancel = new System.Windows.Forms.Button();
+            this.Reset = new System.Windows.Forms.Button();
+            this.BrowseDirs = new System.Windows.Forms.FolderBrowserDialog();
+            this.Spassworde = new System.Windows.Forms.CheckBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.Cbrowse = new System.Windows.Forms.Button();
+            this.Cpath = new System.Windows.Forms.TextBox();
+            this.OpenFile = new System.Windows.Forms.OpenFileDialog();
+            this.label6 = new System.Windows.Forms.Label();
+            this.SQLDbrowse = new System.Windows.Forms.Button();
+            this.SQLDpath = new System.Windows.Forms.TextBox();
+            this.Cstart = new System.Windows.Forms.CheckBox();
+            this.SuspendLayout();
+            // 
+            // Install
+            // 
+            this.Install.Location = new System.Drawing.Point(136, 282);
+            this.Install.Name = "Install";
+            this.Install.Size = new System.Drawing.Size(75, 23);
+            this.Install.TabIndex = 0;
+            this.Install.Text = "Install";
+            this.Install.UseVisualStyleBackColor = true;
+            this.Install.Click += new System.EventHandler(this.Install_Click);
+            // 
+            // AID
+            // 
+            this.AID.Location = new System.Drawing.Point(12, 24);
+            this.AID.Name = "AID";
+            this.AID.Size = new System.Drawing.Size(280, 20);
+            this.AID.TabIndex = 1;
+            this.AID.Text = "C:\\Ambari";
+            // 
+            // Browse
+            // 
+            this.Browse.Location = new System.Drawing.Point(298, 21);
+            this.Browse.Name = "Browse";
+            this.Browse.Size = new System.Drawing.Size(75, 23);
+            this.Browse.TabIndex = 2;
+            this.Browse.Text = "Browse";
+            this.Browse.UseVisualStyleBackColor = true;
+            this.Browse.Click += new System.EventHandler(this.Browse_Click);
+            // 
+            // Sname
+            // 
+            this.Sname.Location = new System.Drawing.Point(12, 63);
+            this.Sname.Name = "Sname";
+            this.Sname.Size = new System.Drawing.Size(280, 20);
+            this.Sname.TabIndex = 3;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 9);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(161, 13);
+            this.label1.TabIndex = 4;
+            this.label1.Text = "Ambari SCOM package directory";
+            // 
+            // asda
+            // 
+            this.asda.AutoSize = true;
+            this.asda.Location = new System.Drawing.Point(12, 47);
+            this.asda.Name = "asda";
+            this.asda.Size = new System.Drawing.Size(111, 13);
+            this.asda.TabIndex = 5;
+            this.asda.Text = "SQL Server hostname";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(12, 86);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(83, 13);
+            this.label2.TabIndex = 7;
+            this.label2.Text = "SQL Server port";
+            // 
+            // Sport
+            // 
+            this.Sport.Location = new System.Drawing.Point(12, 102);
+            this.Sport.Name = "Sport";
+            this.Sport.Size = new System.Drawing.Size(280, 20);
+            this.Sport.TabIndex = 6;
+            this.Sport.Text = "1433";
+            this.Sport.TextChanged += new System.EventHandler(this.Sport_TextChanged);
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(12, 125);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(87, 13);
+            this.label3.TabIndex = 9;
+            this.label3.Text = "SQL Server login";
+            // 
+            // Slogin
+            // 
+            this.Slogin.Location = new System.Drawing.Point(12, 141);
+            this.Slogin.Name = "Slogin";
+            this.Slogin.Size = new System.Drawing.Size(280, 20);
+            this.Slogin.TabIndex = 8;
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(12, 164);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(110, 13);
+            this.label4.TabIndex = 11;
+            this.label4.Text = "SQL Server password";
+            // 
+            // Spassword
+            // 
+            this.Spassword.Location = new System.Drawing.Point(12, 180);
+            this.Spassword.Name = "Spassword";
+            this.Spassword.Size = new System.Drawing.Size(277, 20);
+            this.Spassword.TabIndex = 10;
+            this.Spassword.UseSystemPasswordChar = true;
+            // 
+            // Cancel
+            // 
+            this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.Cancel.Location = new System.Drawing.Point(217, 282);
+            this.Cancel.Name = "Cancel";
+            this.Cancel.Size = new System.Drawing.Size(75, 23);
+            this.Cancel.TabIndex = 12;
+            this.Cancel.Text = "Cancel";
+            this.Cancel.UseVisualStyleBackColor = true;
+            this.Cancel.Click += new System.EventHandler(this.Cancel_Click);
+            // 
+            // Reset
+            // 
+            this.Reset.Location = new System.Drawing.Point(298, 282);
+            this.Reset.Name = "Reset";
+            this.Reset.Size = new System.Drawing.Size(75, 23);
+            this.Reset.TabIndex = 13;
+            this.Reset.Text = "Reset";
+            this.Reset.UseVisualStyleBackColor = true;
+            this.Reset.Click += new System.EventHandler(this.Reset_Click);
+            // 
+            // BrowseDirs
+            // 
+            this.BrowseDirs.RootFolder = System.Environment.SpecialFolder.MyComputer;
+            // 
+            // Spassworde
+            // 
+            this.Spassworde.AutoSize = true;
+            this.Spassworde.Location = new System.Drawing.Point(295, 182);
+            this.Spassworde.Name = "Spassworde";
+            this.Spassworde.Size = new System.Drawing.Size(78, 17);
+            this.Spassworde.TabIndex = 14;
+            this.Spassworde.Text = "Show pass";
+            this.Spassworde.UseVisualStyleBackColor = true;
+            this.Spassworde.CheckedChanged += new System.EventHandler(this.Spassworde_CheckedChanged);
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(12, 241);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(219, 13);
+            this.label5.TabIndex = 17;
+            this.label5.Text = "Path to cluster layout file (clusterpoperties.txt)";
+            // 
+            // Cbrowse
+            // 
+            this.Cbrowse.Location = new System.Drawing.Point(298, 253);
+            this.Cbrowse.Name = "Cbrowse";
+            this.Cbrowse.Size = new System.Drawing.Size(75, 23);
+            this.Cbrowse.TabIndex = 16;
+            this.Cbrowse.Text = "Browse";
+            this.Cbrowse.UseVisualStyleBackColor = true;
+            this.Cbrowse.Click += new System.EventHandler(this.Cbrowse_Click);
+            // 
+            // Cpath
+            // 
+            this.Cpath.Location = new System.Drawing.Point(12, 256);
+            this.Cpath.Name = "Cpath";
+            this.Cpath.Size = new System.Drawing.Size(277, 20);
+            this.Cpath.TabIndex = 15;
+            // 
+            // OpenFile
+            // 
+            this.OpenFile.DefaultExt = "*.txt";
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(12, 203);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(222, 13);
+            this.label6.TabIndex = 20;
+            this.label6.Text = "Path to SQL Server JDBC Driver (sqljdbc4.jar)";
+            // 
+            // SQLDbrowse
+            // 
+            this.SQLDbrowse.Location = new System.Drawing.Point(298, 215);
+            this.SQLDbrowse.Name = "SQLDbrowse";
+            this.SQLDbrowse.Size = new System.Drawing.Size(75, 23);
+            this.SQLDbrowse.TabIndex = 19;
+            this.SQLDbrowse.Text = "Browse";
+            this.SQLDbrowse.UseVisualStyleBackColor = true;
+            this.SQLDbrowse.Click += new System.EventHandler(this.SQLDbrowse_Click);
+            // 
+            // SQLDpath
+            // 
+            this.SQLDpath.Location = new System.Drawing.Point(12, 218);
+            this.SQLDpath.Name = "SQLDpath";
+            this.SQLDpath.Size = new System.Drawing.Size(277, 20);
+            this.SQLDpath.TabIndex = 18;
+            // 
+            // Cstart
+            // 
+            this.Cstart.AutoSize = true;
+            this.Cstart.Location = new System.Drawing.Point(12, 283);
+            this.Cstart.Name = "Cstart";
+            this.Cstart.Size = new System.Drawing.Size(92, 17);
+            this.Cstart.TabIndex = 21;
+            this.Cstart.Text = "Start Services";
+            this.Cstart.UseVisualStyleBackColor = true;
+            // 
+            // Form1
+            // 
+            this.AcceptButton = this.Install;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.Cancel;
+            this.ClientSize = new System.Drawing.Size(375, 308);
+            this.ControlBox = false;
+            this.Controls.Add(this.Cstart);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.SQLDbrowse);
+            this.Controls.Add(this.SQLDpath);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.Cbrowse);
+            this.Controls.Add(this.Cpath);
+            this.Controls.Add(this.Spassworde);
+            this.Controls.Add(this.Reset);
+            this.Controls.Add(this.Cancel);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.Spassword);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.Slogin);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.Sport);
+            this.Controls.Add(this.asda);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.Sname);
+            this.Controls.Add(this.Browse);
+            this.Controls.Add(this.AID);
+            this.Controls.Add(this.Install);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+            this.MaximizeBox = false;
+            this.MinimizeBox = false;
+            this.Name = "Form1";
+            this.ShowIcon = false;
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Text = "Ambari-SCOM setup";
+            this.TopMost = true;
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button Install;
+        private System.Windows.Forms.TextBox AID;
+        private System.Windows.Forms.Button Browse;
+        private System.Windows.Forms.TextBox Sname;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label asda;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox Sport;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox Slogin;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox Spassword;
+        private System.Windows.Forms.Button Cancel;
+        private System.Windows.Forms.Button Reset;
+        private System.Windows.Forms.FolderBrowserDialog BrowseDirs;
+        private System.Windows.Forms.CheckBox Spassworde;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Button Cbrowse;
+        private System.Windows.Forms.TextBox Cpath;
+        private System.Windows.Forms.OpenFileDialog OpenFile;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Button SQLDbrowse;
+        private System.Windows.Forms.TextBox SQLDpath;
+        private System.Windows.Forms.CheckBox Cstart;
+       
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Form1.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Form1.cs b/contrib/ambari-scom/msi/src/GUI/Form1.cs
new file mode 100644
index 0000000..9d6cc8c
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Form1.cs
@@ -0,0 +1,276 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Text.RegularExpressions;
+using System.Diagnostics;
+
+namespace GUI_Ambari
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+
+            InitializeComponent();
+
+        }
+
+        private void Form1_Load(object sender, EventArgs e)
+        {
+            Sname.Text = Environment.GetEnvironmentVariable("computername");
+
+
+        }
+
+        private void Browse_Click(object sender, EventArgs e)
+        {
+            BrowseDirs.ShowDialog();
+
+            if (BrowseDirs.SelectedPath.ToString().Contains(" "))
+            {
+                MessageBox.Show("Please select correct log directory. Directories containing spaces are disallowed", "Error");
+
+
+            }
+            else if (BrowseDirs.SelectedPath.ToString().Length == 3)
+            {
+                MessageBox.Show("Please select correct log directory. Root directories are disallowed", "Error");
+
+            }
+            else
+            {
+
+                AID.Text = BrowseDirs.SelectedPath;
+            }
+        }
+
+        private void Sport_TextChanged(object sender, EventArgs e)
+        {
+            string test = Sport.Text.ToString();
+
+
+            if (!Regex.IsMatch(test, "[0-9]") || (Convert.ToInt32(test) > 65536))
+            {
+                Sport.Clear();
+            }
+
+        }
+
+        private void Install_Click(object sender, EventArgs e)
+        {
+            if (string.IsNullOrEmpty(AID.Text) || string.IsNullOrEmpty(Sname.Text) || string.IsNullOrEmpty(Sport.Text) || string.IsNullOrEmpty(Slogin.Text) || string.IsNullOrEmpty(Spassword.Text) || string.IsNullOrEmpty(SQLDpath.Text))
+            {
+                MessageBox.Show("Please fill in all fields", "Error");
+            }
+            else if (string.IsNullOrEmpty(AID.Text) || AID.Text.Contains(" ") || !AID.Text.Contains("\\") || !AID.Text.Contains(":") || (AID.Text.Length < 4))
+            {
+                MessageBox.Show("Please enter correct Ambari directory", "Error");
+            }
+            else if (string.IsNullOrEmpty(SQLDpath.Text) || SQLDpath.Text.Contains(" ") || !SQLDpath.Text.Contains("\\") || !SQLDpath.Text.Contains(":") || (SQLDpath.Text.Length < 4)|| !SQLDpath.Text.Contains(".jar"))
+            {
+                MessageBox.Show("Please enter correct SQL JDBC driver path", "Error");
+            }
+            else
+            {
+                //if (!(Sname.Text == Environment.GetEnvironmentVariable("computername")))
+                //{
+                //    Validate_Hosts();
+                //}
+                //else
+                //{
+                    Generate_Ambari_Props();
+                //}
+                
+            }
+        }
+
+        private void Cancel_Click(object sender, EventArgs e)
+        {
+            DialogResult result = MessageBox.Show("Do you really want to exit?", "Warning", MessageBoxButtons.YesNo);
+            if (result == DialogResult.Yes)
+            {
+                Environment.Exit(1);
+            }
+
+        }
+
+        private void Reset_Click(object sender, EventArgs e)
+        {
+            AID.Text = "C:\\Ambari";
+            Sname.Text = Environment.GetEnvironmentVariable("computername");
+            Sport.Text = "1433";
+            Slogin.Clear();
+            Spassword.Clear();
+            Spassworde.Checked = false;
+            Cpath.Clear();
+            SQLDpath.Clear();
+            Cstart.Checked = false;
+        }
+
+        private void Spassworde_CheckedChanged(object sender, EventArgs e)
+        {
+            if (Spassworde.Checked)
+            {
+                Spassword.UseSystemPasswordChar = false;
+                Spassword.Text = Spassword.Text;
+            }
+            else
+            {
+                Spassword.UseSystemPasswordChar = true;
+                Spassword.Text = Spassword.Text;
+            }
+        }
+        private void Generate_Ambari_Props()
+        {
+            string res = Environment.GetEnvironmentVariable("appdata") + "\\amb_install";
+            if (System.IO.Directory.Exists(res))
+            {
+                System.IO.Directory.Delete(res, true);
+                System.IO.Directory.CreateDirectory(res);
+            }
+            if (!System.IO.Directory.Exists(res))
+            {
+                System.IO.Directory.CreateDirectory(res);
+            }
+            string cp = res + "\\ambariproperties.txt";
+            using (StreamWriter sw = File.CreateText(cp))
+            {
+                sw.WriteLine("AMB_DATA_DIR=" + AID.Text);
+                sw.WriteLine("SQL_SERVER_NAME=" + Sname.Text);
+                sw.WriteLine("SQL_SERVER_LOGIN=" + Slogin.Text);
+                sw.WriteLine("SQL_SERVER_PASSWORD=" + Spassword.Text);
+                sw.WriteLine("SQL_SERVER_PORT=" + Sport.Text);
+                sw.WriteLine("SQL_JDBC_PATH=" + SQLDpath.Text);
+                if (Cstart.Checked == true)
+                {
+                    Environment.SetEnvironmentVariable("START_SERVICES", "yes", EnvironmentVariableTarget.Machine);
+                }
+
+            }
+            Environment.SetEnvironmentVariable("HDP_LAYOUT", Cpath.Text, EnvironmentVariableTarget.Machine);
+            Environment.Exit(0);
+        }
+        private void Validate_Hosts()
+        {
+
+            foreach (Control c in this.Controls)
+            {
+                c.Enabled = false;
+            }
+            string failed = "";
+
+            failed = ping(Sname.Text, failed);
+
+
+
+            if (!string.IsNullOrEmpty(failed))
+            {
+                DialogResult result = MessageBox.Show(new Form() { TopMost = true }, "SQL Server host is not accessible:\r\n" + failed + "Do you want to continue installation with inaccessible SQL Server host?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+                if (result == DialogResult.Yes)
+                {
+                    Generate_Ambari_Props();
+                }
+                else
+                {
+                    foreach (Control c in this.Controls)
+                    {
+                        c.Enabled = true;
+                    }
+                }
+            }
+            
+        }
+        private string ping(string host, string failed)
+        {
+
+            Process process = new Process();
+            process.StartInfo.FileName = "C:\\windows\\system32\\ping.exe";
+            process.StartInfo.Arguments = host;
+            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
+            process.Start();
+            process.WaitForExit();
+            int code = process.ExitCode;
+            if (code == 1)
+            {
+                failed = failed + host + "\r\n";
+            }
+
+            return failed;
+        }
+
+        private void Cbrowse_Click(object sender, EventArgs e)
+        {
+           OpenFileDialog OpenFile = new OpenFileDialog();
+           OpenFile.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
+           OpenFile.InitialDirectory = @"C:\";
+           OpenFile.Title = "Please select Ambari properties file";
+           OpenFile.ShowDialog();
+          
+           if (OpenFile.FileName.ToString().Contains(" "))
+            {
+                MessageBox.Show("Please select correct path. Path containing spaces are disallowed", "Error");
+
+
+            }
+           else if (OpenFile.FileName.ToString().Length <= 4)
+            {
+                MessageBox.Show("Please select correct path", "Error");
+
+            }
+            else
+            {
+
+                Cpath.Text = OpenFile.FileName.ToString();
+            }
+        }
+
+        private void SQLDbrowse_Click(object sender, EventArgs e)
+        {
+            OpenFileDialog OpenFile = new OpenFileDialog();
+            OpenFile.Filter = "jar files (*.jar)|*.jar|All files (*.*)|*.*";
+            OpenFile.InitialDirectory = @"C:\";
+            OpenFile.Title = "Please select SQL JDBC driver.";
+            OpenFile.ShowDialog();
+
+
+            if (OpenFile.FileName.ToString().Contains(" "))
+            {
+                MessageBox.Show("Please select correct path. Path containing spaces are disallowed", "Error");
+
+
+            }
+            else if (OpenFile.FileName.ToString().Length <= 4)
+            {
+                MessageBox.Show("Please select correct path", "Error");
+
+            }
+            else
+            {
+                SQLDpath.Text = OpenFile.FileName.ToString();
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Form1.resx
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Form1.resx b/contrib/ambari-scom/msi/src/GUI/Form1.resx
new file mode 100644
index 0000000..f0005b1
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Form1.resx
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+     http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. -->
+
+<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="BrowseDirs.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="OpenFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>129, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/GUI_Ambari.csproj
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/GUI_Ambari.csproj b/contrib/ambari-scom/msi/src/GUI/GUI_Ambari.csproj
new file mode 100644
index 0000000..a2e9cc0
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/GUI_Ambari.csproj
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+     http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. -->
+
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{48B27787-5714-4C28-9F9D-8B2A02237BAD}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>GUI_Ambari</RootNamespace>
+    <AssemblyName>GUI_Ambari</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <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' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <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.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <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="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <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>
+    </Compile>
+    <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>
+    <None Include="App.config" />
+  </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

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Program.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Program.cs b/contrib/ambari-scom/msi/src/GUI/Program.cs
new file mode 100644
index 0000000..59de9d6
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Program.cs
@@ -0,0 +1,38 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace GUI_Ambari
+{
+    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());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Properties/AssemblyInfo.cs b/contrib/ambari-scom/msi/src/GUI/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7f9c77f
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+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("GUI_Ambari")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("GUI_Ambari")]
+[assembly: AssemblyCopyright("Copyright ©  2013")]
+[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("ad830f21-dcaf-4391-852b-6de098861879")]
+
+// 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")]

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Properties/Resources.Designer.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Properties/Resources.Designer.cs b/contrib/ambari-scom/msi/src/GUI/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..20f852d
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Properties/Resources.Designer.cs
@@ -0,0 +1,87 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18052
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GUI_Ambari.Properties
+{
+
+
+    /// <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", "4.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 ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GUI_Ambari.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;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Properties/Resources.resx
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Properties/Resources.resx b/contrib/ambari-scom/msi/src/GUI/Properties/Resources.resx
new file mode 100644
index 0000000..97b0bb7
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Properties/Resources.resx
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+     http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. -->
+
+<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.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: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" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </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" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </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

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Properties/Settings.Designer.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Properties/Settings.Designer.cs b/contrib/ambari-scom/msi/src/GUI/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..98559d7
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Properties/Settings.Designer.cs
@@ -0,0 +1,46 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18052
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GUI_Ambari.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.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;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/GUI/Properties/Settings.settings
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/GUI/Properties/Settings.settings b/contrib/ambari-scom/msi/src/GUI/Properties/Settings.settings
new file mode 100644
index 0000000..5f90ec3
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/GUI/Properties/Settings.settings
@@ -0,0 +1,20 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+     http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. -->
+
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/Result/Ambari_Result.csproj
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/Result/Ambari_Result.csproj b/contrib/ambari-scom/msi/src/Result/Ambari_Result.csproj
new file mode 100644
index 0000000..49fb5b9
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/Result/Ambari_Result.csproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+     http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. -->
+
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{94F51376-8532-48EE-8897-3F9A46B39702}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Ambari_Result</RootNamespace>
+    <AssemblyName>Ambari_Result</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <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' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <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.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <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="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <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>
+    </Compile>
+    <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>
+    <None Include="App.config" />
+  </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

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/Result/App.config
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/Result/App.config b/contrib/ambari-scom/msi/src/Result/App.config
new file mode 100644
index 0000000..58f0a29
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/Result/App.config
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+     http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. -->
+
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+</configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/Result/Program.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/Result/Program.cs b/contrib/ambari-scom/msi/src/Result/Program.cs
new file mode 100644
index 0000000..9c64eb4
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/Result/Program.cs
@@ -0,0 +1,43 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Ambari_Result
+{
+    static class Program
+    {
+        [STAThread]
+        static void Main()
+        {
+            string file = Environment.GetEnvironmentVariable("tmp") + @"\ambari_failed.txt";
+            if (File.Exists(file))
+            {
+                string text = File.ReadAllText(file);
+                DialogResult result = MessageBox.Show("Uninstallation on next nodes failed.\r\nPlease proceed with manual uninstallation for these nodes\r\n" + text, "Ambari-SCOM Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly);
+                if (result == DialogResult.OK)
+                {
+                    Environment.Exit(0);
+                }
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/Result/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/Result/Properties/AssemblyInfo.cs b/contrib/ambari-scom/msi/src/Result/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..4186e66
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/Result/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+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("Ambari_Result")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Ambari_Result")]
+[assembly: AssemblyCopyright("Copyright ©  2013")]
+[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("d4bd1fc6-b566-4d42-b82e-e0f502cd9dfe")]
+
+// 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")]

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/msi/src/Result/Properties/Resources.Designer.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/msi/src/Result/Properties/Resources.Designer.cs b/contrib/ambari-scom/msi/src/Result/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..36efa5c
--- /dev/null
+++ b/contrib/ambari-scom/msi/src/Result/Properties/Resources.Designer.cs
@@ -0,0 +1,87 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18052
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Ambari_Result.Properties
+{
+
+
+    /// <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", "4.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 ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Ambari_Result.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;
+            }
+        }
+    }
+}