Classification: Public
I have the same requirements and ended up writing a custom action to do the 
work for me:
>From Windows 7/8/2008R2/2012 I use Dism.exe for OS's below I use ocsetup.exe 
>(we use MSMQ for our Server product and our Client product), however Microsoft 
>being so consistent (being sarcastic) the features for MSMQ change from OS to 
>OS :( so I ended up doing something like this:
[CustomAction]
        public static ActionResult CheckToSeeIfMSMQIsInstalled(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 serviceExists = ServiceController.GetServices().Any(s => 
s.ServiceName == "MSMQ");
                if (!serviceExists)
                {
                    var platformVersion = Environment.OSVersion.VersionString;

                    var cmdLineParameters = string.Empty;
                    if (platformVersion.Contains("6.0.600") && 
!Os.IsWindowsServer())
                    {
                        // Windows Vista
                        cmdLineParameters = "MSMQ-Container;MSMQ-Server /quiet 
/norestart";
                    }
                    else if ((platformVersion.Contains("6.1.760") && 
!Os.IsWindowsServer())
                             || (platformVersion.Contains("6.2.920") && 
!Os.IsWindowsServer()))
                    {
                        // Windows 7 and Windows 8
                        cmdLineParameters = "/Online /NoRestart /Enable-Feature 
/featurename:MSMQ-Container /featurename:MSMQ-Server";
                    }
                    else if (platformVersion.Contains("6.1.760") && 
Os.IsWindowsServer())
                    {
                        // Windows Server 2008 R2
                        cmdLineParameters = "/Online /NoRestart /Enable-Feature 
/featurename:MSMQ-Server";
                    }
                    else if (platformVersion.Contains("6.2.920") && 
Os.IsWindowsServer())
                    {
                        // Windows Server 2012
                        cmdLineParameters = "/Online /NoRestart /Enable-Feature 
/featurename:MSMQ /featurename:MSMQ-Services /featurename:MSMQ-Server";
                    }

                    string cmdLineExe;
                    if (platformVersion.Contains("6.0.600") && 
!Os.IsWindowsServer())
                    {
                        // Windows Vista
                        cmdLineExe = 
Environment.GetFolderPath(Environment.SpecialFolder.System) + "\\ocsetup.exe";
                    }
                    else
                    {
                        // Windows 7 / 8 / 2008R2 / 2012
                        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
                        cmdLineExe = system32Directory + "\\dism.exe";
                    }

                    // Install MSMQ 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, "CheckToSeeIfMSMQIsInstalled 
failed: ", ex, true);
                if (session != null)
                {
                    session.Message(
                        InstallMessage.User + (int)MessageBoxIcon.Error + 
(int)MessageBoxButtons.OK,
                        new Record { FormatString = productName + " requires 
Microsoft Message Queuing Service (MSMQ). Setup failed to install MSMQ, please 
go to Programs and Features and turn this feature on 'Microsoft Message Queue 
(MSMQ) Server'." });
                }

                return ActionResult.Failure;
            }

            return ActionResult.Success;
        }


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 Os.IsOS(OS_ANYSERVER);
            }

            [DllImport("shlwapi.dll", SetLastError = true, EntryPoint = "#437")]
            private static extern bool IsOS(int os);
        }

Steve


-----Original Message-----
From: José Marques [mailto:jose.marq...@waveform.pt]
Sent: July-24-13 6:18 AM
To: wix-users@lists.sourceforge.net
Subject: [WiX-users] Installing MSMQ as dependency

Hello all,

On the installer I'm currently developing, I need to install Microsoft Message 
Queue (MSMQ) as a dependency. Depending on Windows version, I need to run 
ocsetup.exe or sysocmgr.exe. No issues with ocsetup, my problem relies with 
sysocmgr.
So far I've thought of two ways to do it: add an ExePackage to my existing 
bundle, or setting a custom action.
Either way, the issues I'm currently having is:

- If i do it in the bundle, i need to provide the .exe file, which I think it 
is not recommended, I have to call it. (correct me if I'm wrong)
- I need to pass a file with MSMQ options as a parameter, is this possible?
(I didn't anything remotely close with this)

If there's another simple and/or correct way of installing MSMQ let me know as 
well :)

Thank you for your help,

José Marques
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics Get end-to-end 
visibility with application monitoring from AppDynamics Isolate bottlenecks and 
diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

 
This message has been marked as Public by Steven Ogilvie on July-24-13 9:09:47 
AM.

The above classification labels were added to the message by TITUS Message 
Classification. For more information visit www.titus.com.

 



------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&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