One problem is that between the different versions of Windows the DISM command
line parameters have changed...
I have created a custom action that checks what version of Windows I am running
and then sets the command line parameters up accordingly...
Btw WriteErrorLogInstall is a custom logging function replace it with the
session logging...
/// <summary>
/// The check web server roles.
/// </summary>
/// <param name="session">
/// The session.
/// </param>
/// <returns>
/// The<see cref="ActionResult"/>.
/// </returns>
/// <exception cref="ArgumentNullException">
/// throw new ArgumentNullException("session");
/// </exception>
[CustomAction]
public static ActionResult CheckWebServerRoles(Session session)
{
var productName = string.Empty;
try
{
if (session == null)
{
throw new ArgumentNullException("session");
}
var tempString = GetSessionProperty(session,
"CustomActionData", false);
var parts = tempString.Split(new[] { '|' });
productName = parts[0];
var platformVersion = Environment.OSVersion.VersionString;
var cmdLineParameters = string.Empty;
if (platformVersion.Contains("6.1.760") &&
!Os.IsWindowsServer())
{
// Windows 7
cmdLineParameters = "/Online /NoRestart /Enable-Feature
/featurename:IIS-WebServerRole /featurename:IIS-CommonHttpFeatures
/featurename:IIS-StaticContent /featurename:IIS-WebServerRole
/featurename:IIS-ApplicationDevelopment /featurename:IIS-ISAPIFilter
/featurename:IIS-ISAPIExtensions /featurename:IIS-NetFxExtensibility
/featurename:IIS-ASPNET /featurename:IIS-WebServerRole
/featurename:IIS-Security /featurename:IIS-RequestFiltering
/featurename:IIS-WindowsAuthentication /featurename:WAS-ProcessModel
/featurename:WAS-WindowsActivationService /featurename:WAS-NetFxEnvironment
/featurename:WAS-ConfigurationAPI /featurename:NetFx3
/featurename:WCF-HTTP-Activation";
}
else if (platformVersion.Contains("6.1.760") &&
Os.IsWindowsServer())
{
// Windows Server 2008 R2
cmdLineParameters = "/Online /NoRestart /Enable-Feature
/featurename:IIS-WebServerRole /featurename:IIS-CommonHttpFeatures
/featurename:IIS-StaticContent /featurename:IIS-WebServerRole
/featurename:IIS-ApplicationDevelopment /featurename:IIS-ISAPIFilter
/featurename:IIS-ISAPIExtensions /featurename:IIS-NetFxExtensibility
/featurename:IIS-ASPNET /featurename:IIS-WebServerRole
/featurename:IIS-Security /featurename:IIS-RequestFiltering
/featurename:IIS-WindowsAuthentication /featurename:NetFx3
/featurename:WCF-HTTP-Activation";
}
else if (platformVersion.Contains("6.2.920") &&
!Os.IsWindowsServer())
{
// Windows 8
cmdLineParameters = "/Online /NoRestart /Enable-Feature
/featurename:IIS-WebServerRole /featurename:IIS-CommonHttpFeatures
/featurename:IIS-StaticContent /featurename:IIS-ApplicationDevelopment
/featurename:IIS-ISAPIFilter /featurename:IIS-ISAPIExtensions
/featurename:IIS-NetFxExtensibility45 /featurename:IIS-ASPNET45
/featurename:IIS-Security /featurename:IIS-RequestFiltering
/featurename:IIS-WindowsAuthentication /featurename:NetFx4-AdvSrvs
/featurename:NetFx4Extended-ASPNET45 /featurename:WCF-Services45
/featurename:WCF-HTTP-Activation45 /All";
}
else if (platformVersion.Contains("6.2.920") &&
Os.IsWindowsServer())
{
// Windows Server 2012
cmdLineParameters = "/Online /NoRestart /Enable-Feature
/featurename:IIS-WebServerRole /featurename:IIS-CommonHttpFeatures
/featurename:IIS-StaticContent /featurename:IIS-ApplicationDevelopment
/featurename:IIS-ISAPIFilter /featurename:IIS-ISAPIExtensions
/featurename:IIS-NetFxExtensibility45 /featurename:IIS-ASPNET45
/featurename:IIS-Security /featurename:IIS-RequestFiltering
/featurename:IIS-WindowsAuthentication /featurename:NetFx4
/featurename:NetFx4Extended-ASPNET45 /featurename:WCF-Services45
/featurename:WCF-HTTP-Activation45 /All";
}
var system32Directory =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),
"system32");
if (Environment.Is64BitOperatingSystem &&
!Environment.Is64BitProcess)
{
// For 32-bit processes on 64-bit systems,
%windir%\system32 folder
// can only be accessed by specifying %windir%\sysnative
folder.
system32Directory =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),
"sysnative");
}
// Windows 7 / 8 / 2008R2 / 2012
var cmdLineExe = Path.Combine(system32Directory, "dism.exe");
// Install Web Server features if missing
var runDismInfo = new ProcessStartInfo
{
UseShellExecute = true,
Arguments = cmdLineParameters,
FileName = cmdLineExe,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
// Run the external process & wait for it to finish
using (var runDismProc = Process.Start(runDismInfo))
{
runDismProc.WaitForExit();
}
}
catch (Exception ex)
{
WriteErrorLogInstall(session, "CheckWebServerRoles failed: ",
ex, true);
if (session != null)
{
session.Message(
InstallMessage.User + (int)MessageBoxIcon.Error +
(int)MessageBoxButtons.OK,
new Record { FormatString = productName + " failed to
install specific Web Server features\nException: " + ex.Message });
}
return ActionResult.Failure;
}
WriteSuccessLogInstall(session, "CheckWebServerRoles succeeded to
install specific Web Server features...", true);
return ActionResult.Success;
}
/// <summary>
/// The OS.
/// </summary>
private class Os
{
/// <summary>
/// The OS ANYSERVER.
/// </summary>
[SuppressMessage("StyleCop.CSharp.NamingRules",
"SA1310:FieldNamesMustNotContainUnderscore", Justification = "Reviewed.
Suppression is OK here.")]
// ReSharper disable InconsistentNaming
private const int OS_ANYSERVER = 29;
// ReSharper restore InconsistentNaming
/// <summary>
/// Prevents a default instance of the <see cref="Os"/> class from
being created.
/// </summary>
private Os()
{
}
/// <summary>
/// The is windows server.
/// </summary>
/// <returns>
/// The <see cref="bool"/>.
/// </returns>
public static bool IsWindowsServer()
{
return IsOS(OS_ANYSERVER);
}
[DllImport("shlwapi.dll", SetLastError = true, EntryPoint = "#437")]
private static extern bool IsOS(int os);
}
-----Original Message-----
From: John Walter [mailto:[email protected]]
Sent: December-11-13 5:41 AM
To: [email protected]
Subject: [WiX-users] Help activating IIS using the DISM command
Hi,
I am fairly new to the WiX installer but have been able to create an install
package that creates our website and installs all needed components some being
installed from other installers run from my bootstrapper.
The one element I am having difficulties with is enabling IIS. We need to have
the ASPNET45 features enabled for our web page to operate so even if the IIS is
enabled on the destination PC I need to check the features that are enabled. I
can do this via the registry as each feature has an entry nd so can build a
DISM command line that only enabled the missing features.
The problems I am having seem to come from inconsistencies with how the DISM
command run. Sometimes there are no errors and IIS is up and running, sometimes
I get error 0x800f0906 (this is concerning the source of the files needed for
the features being enabled) and sometimes the IIS is installed but will only be
running once the PC has been re-booted. The PC in all cases was a clean freshly
installed version of Windows 8 (32-Bit) run as a virtual PC and reset after
each attempt but using a snapshot so I am reasonably confident that the PC in
all cases was the same.
Can anyone give me a clue as to where I can go from here as it seems the only
way for me to get round this reliably would be to give detailed instructions as
to how to enable IIS and what settings are required and get the user to
activate manually and only check that the required features are turned on
before installing the web site.
Example of the DISM command line
DISM /online /enable-feature /featurename:NetFx3 /featurename:NetFx4-AdvSrvs
/featurename:NetFx4Extended-ASPNET45
/featurename:IIS-NetFxExtensibility45 /featurename:IIS-ASPNET45 /All
--
*John Walter*
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance affects
their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, &
PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users