Thanks Steven yes I have similar also by checking the registry I build a
list of the missing features so in theory if all the needed features are
active I should not need to run DISM.

As I said my main issue is with the seemingly random nature of what happens
when DISM is run on the one PC starting from a fixed point just after
installing Windows I have seen it work with no error, error out with the
error 0x800f0906 and require the PC to be restarted before IIS is active. I
was hoping that there might be a more reliable way than using DISM of
activating the IIS.




On 11 December 2013 14:33, Steven Ogilvie <steven.ogil...@titus.com> wrote:

> 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:jo...@twofold-software.com]
> Sent: December-11-13 5:41 AM
> To: WiX-users@lists.sourceforge.net
> 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
> WiX-users@lists.sourceforge.net
> 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
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>



-- 

*John Walter*
Two Fold Software Ltd - Defining the Next Generation of LIMS
Dodwell House, Chilton Business Centre,Chilton, Aylesbury,Bucks, HP18 9LS,
UK

Phone: +44 1844 208598
Fax: +44 1844 208869
<http://www.twofold-software.com/>
------------------------------------------------------------------------------
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
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to