PreInstall WebRole and AspNet, small WiX UI fix for Server 2008.
This commit is contained in:
parent
ef97dcfd38
commit
0d12cb94e8
5 changed files with 227 additions and 35 deletions
|
@ -1,14 +1,16 @@
|
|||
using Microsoft.Deployment.WindowsInstaller;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.Deployment.WindowsInstaller;
|
||||
using Microsoft.Win32;
|
||||
using WebsitePanel.Setup;
|
||||
|
||||
namespace WebsitePanel.WIXInstaller.Common
|
||||
{
|
||||
internal static class Tool
|
||||
{
|
||||
public const int MINIMUM_WEBSERVER_MAJOR_VERSION = 6;
|
||||
public static SetupVariables GetSetupVars(Session Ctx)
|
||||
{
|
||||
return new SetupVariables
|
||||
|
@ -17,20 +19,159 @@ namespace WebsitePanel.WIXInstaller.Common
|
|||
IISVersion = Global.IISVersion
|
||||
};
|
||||
}
|
||||
|
||||
public static void FillServerVariables(SetupVariables Vars)
|
||||
public static Version GetWebServerVersion()
|
||||
{
|
||||
|
||||
var WebServerKey = "SOFTWARE\\Microsoft\\InetStp";
|
||||
RegistryKey Key = Registry.LocalMachine.OpenSubKey(WebServerKey);
|
||||
if (Key == null)
|
||||
return new Version(0,0);
|
||||
var Major = int.Parse(Key.GetValue("MajorVersion", 0).ToString());
|
||||
var Minor = int.Parse(Key.GetValue("MinorVersion", 0).ToString());
|
||||
return new Version(Major, Minor);
|
||||
}
|
||||
|
||||
public static void FillEServerVariables(SetupVariables Vars)
|
||||
public static bool GetIsWebRoleInstalled()
|
||||
{
|
||||
|
||||
var WebServer = GetWebServerVersion();
|
||||
return WebServer.Major >= Tool.MINIMUM_WEBSERVER_MAJOR_VERSION;
|
||||
}
|
||||
|
||||
public static void FillPortalVariables(SetupVariables Vars)
|
||||
public static bool GetIsWebFeaturesInstalled()
|
||||
{
|
||||
|
||||
bool Result = false;
|
||||
var LMKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
|
||||
Result |= CheckAspNetRegValue(LMKey);
|
||||
LMKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
|
||||
Result |= CheckAspNetRegValue(LMKey);
|
||||
return Result;
|
||||
}
|
||||
public static bool CheckAspNetRegValue(RegistryKey BaseKey)
|
||||
{
|
||||
var WebComponentsKey = "SOFTWARE\\Microsoft\\InetStp\\Components";
|
||||
var AspNet = "ASPNET";
|
||||
var AspNet45 = "ASPNET45";
|
||||
RegistryKey Key = BaseKey.OpenSubKey(WebComponentsKey);
|
||||
if (Key == null)
|
||||
return false;
|
||||
var Value = int.Parse(Key.GetValue(AspNet, 0).ToString());
|
||||
if (Value != 1)
|
||||
Value = int.Parse(Key.GetValue(AspNet45, 0).ToString());
|
||||
return Value == 1;
|
||||
}
|
||||
public static bool InstallWebRole(out string Msg)
|
||||
{
|
||||
Msg = string.Empty;
|
||||
var OSV = Global.OSVersion;
|
||||
switch (OSV)
|
||||
{
|
||||
case OS.WindowsVersion.WindowsServer2008:
|
||||
{
|
||||
var Features = new[]
|
||||
{
|
||||
"Web-Server"
|
||||
};
|
||||
Msg = InstallWebViaServerManagerCmd(Features);
|
||||
}
|
||||
break;
|
||||
case OS.WindowsVersion.WindowsServer2008R2:
|
||||
case OS.WindowsVersion.WindowsServer2012:
|
||||
case OS.WindowsVersion.WindowsServer2012R2:
|
||||
case OS.WindowsVersion.Windows7:
|
||||
case OS.WindowsVersion.Windows8:
|
||||
{
|
||||
var Features = new[]
|
||||
{
|
||||
"IIS-WebServer",
|
||||
"IIS-WebServerRole",
|
||||
"IIS-CommonHttpFeatures",
|
||||
"IIS-DefaultDocument",
|
||||
"IIS-ISAPIExtensions",
|
||||
"IIS-ISAPIFilter",
|
||||
"IIS-ManagementConsole",
|
||||
"IIS-NetFxExtensibility",
|
||||
"IIS-RequestFiltering",
|
||||
"IIS-Security",
|
||||
"IIS-StaticContent"
|
||||
};
|
||||
Msg = InstallWebViaDism(Features);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public static bool InstallWebFeatures(out string Msg)
|
||||
{
|
||||
Msg = string.Empty;
|
||||
var OSV = Global.OSVersion;
|
||||
switch (OSV)
|
||||
{
|
||||
case OS.WindowsVersion.WindowsServer2008:
|
||||
{
|
||||
var Features = new[]
|
||||
{
|
||||
"Web-Asp-Net"
|
||||
};
|
||||
Msg += InstallWebViaServerManagerCmd(Features);
|
||||
Msg += PrepareAspNet();
|
||||
}
|
||||
break;
|
||||
case OS.WindowsVersion.WindowsServer2008R2:
|
||||
case OS.WindowsVersion.WindowsServer2012:
|
||||
case OS.WindowsVersion.WindowsServer2012R2:
|
||||
case OS.WindowsVersion.Windows7:
|
||||
case OS.WindowsVersion.Windows8:
|
||||
{
|
||||
var Features = new[]
|
||||
{
|
||||
"IIS-ApplicationDevelopment",
|
||||
"IIS-ASPNET",
|
||||
"IIS-ASPNET45"
|
||||
};
|
||||
Msg = InstallWebViaDism(Features);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public static string PrepareAspNet()
|
||||
{
|
||||
var Cmd = string.Format(@"Microsoft.NET\Framework{0}\v4.0.30319\aspnet_regiis.exe", Environment.Is64BitOperatingSystem ? "64" : "" );
|
||||
return RunTool(Path.Combine(OS.GetWindowsDirectory(), Cmd), "-i -enable");
|
||||
}
|
||||
private static string InstallWebViaDism(params string[] Features)
|
||||
{
|
||||
var Params = string.Format("/NoRestart /Online /Enable-Feature {0}",
|
||||
string.Join(" ", Features.Select(
|
||||
Feature => string.Format("/FeatureName:{0} /All", Feature)
|
||||
)));
|
||||
return RunTool(Path.Combine(OS.GetWindowsDirectory(), @"SysNative\dism.exe"), Params);
|
||||
}
|
||||
private static string InstallWebViaServerManagerCmd(params string[] Features)
|
||||
{
|
||||
var Params = string.Format("-install {0}",
|
||||
string.Join(" ", Features)
|
||||
);
|
||||
return RunTool(Path.Combine(OS.GetWindowsDirectory(), @"SysNative\servermanagercmd.exe"), Params);
|
||||
}
|
||||
private static string RunTool(string Name, string Params)
|
||||
{
|
||||
var ToolProcessInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = Name,
|
||||
Arguments = Params,
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
CreateNoWindow = true,
|
||||
WindowStyle = ProcessWindowStyle.Hidden
|
||||
};
|
||||
using (var ToolProcess = Process.Start(ToolProcessInfo))
|
||||
{
|
||||
var Result = ToolProcess.StandardOutput.ReadToEnd();
|
||||
ToolProcess.WaitForExit();
|
||||
return Result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,45 @@ namespace WebsitePanel.WIXInstaller
|
|||
public const string CustomDataDelimiter = "-=del=-";
|
||||
|
||||
#region CustomActions
|
||||
[CustomAction]
|
||||
public static ActionResult InstallWebFeatures(Session session)
|
||||
{
|
||||
var Msg = string.Empty;
|
||||
var Ctx = session;
|
||||
Ctx.AttachToSetupLog();
|
||||
var Result = ActionResult.Success;
|
||||
try
|
||||
{
|
||||
Log.WriteStart("InstallWebFeatures");
|
||||
if(Tool.GetIsWebRoleInstalled())
|
||||
{
|
||||
if (!Tool.GetIsWebFeaturesInstalled())
|
||||
{
|
||||
Log.WriteInfo("InstallWebFeatures: ASP.NET.");
|
||||
Tool.InstallWebFeatures(out Msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var Tmp = string.Empty;
|
||||
Log.WriteInfo("InstallWebFeatures: IIS and ASP.NET.");
|
||||
Tool.InstallWebRole(out Tmp);
|
||||
Msg += Tmp;
|
||||
Tool.InstallWebFeatures(out Tmp);
|
||||
Msg += Tmp;
|
||||
}
|
||||
Log.WriteInfo("InstallWebFeatures: done.");
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Log.WriteError(string.Format("InstallWebFeatures: fail - {0}.", ex.ToString()));
|
||||
Result = ActionResult.Failure;
|
||||
}
|
||||
if(!string.IsNullOrWhiteSpace(Msg))
|
||||
Log.WriteInfo(string.Format("InstallWebFeatures Tool Log: {0}.", Msg));
|
||||
Log.WriteEnd("InstallWebFeatures");
|
||||
return Result;
|
||||
}
|
||||
// Install.
|
||||
[CustomAction]
|
||||
public static ActionResult OnServerInstall(Session session)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue