예제 #1
0
        private static string GetGuidString()
        {
            var msiBuilderSettings = new MsiBuilderSettings();
            var guidStrings        = msiBuilderSettings.GuidBasis;


            switch (msiBuilderSettings.Environment.ToLower())
            {
            case "dev":
                return(guidStrings.Substring(0, guidStrings.Length - 1) + "1");

            case "ci":
                return(guidStrings.Substring(0, guidStrings.Length - 1) + "2");

            case "qa":
                return(guidStrings.Substring(0, guidStrings.Length - 1) + "3");

            case "prod":
                return(guidStrings.Substring(0, guidStrings.Length - 1) + "4");

            default:
                throw new ArgumentException(
                          "Unknown Environment in settings: " + msiBuilderSettings.Environment);
            }
        }
예제 #2
0
        public void BuildMsi()
        {
            Log.Logger = StandardLoggerConfigurator
                         .GetLoggerConfig()
                         .CreateLogger();

            try
            {
                Log.Logger.Debug(@"Building MSI...");

                IMsiBuilderSettings msiBuilderSettings = new MsiBuilderSettings();

                var pathChoices = msiBuilderSettings.PathChoices;
                var uiExe       = msiBuilderSettings.UiExe;

                Log.Logger.Debug(@"Creating installer for: " + uiExe);

                var path = pathChoices.FirstOrDefault(x => File.Exists(x + @"\" + uiExe));
                if (string.IsNullOrEmpty(path))
                {
                    throw new ArgumentException("The uiExe was not found: " + uiExe);
                }

                Log.Logger.Debug(@"Chosen path: " + path);

                var guidString = GetGuidString();

                var envStringToShow = GetEnvStringToShow(msiBuilderSettings);
                var releaseNumber   = msiBuilderSettings.ReleaseNumber;

                Log.Logger.Debug(@"Release number is: " + releaseNumber);

                var companyName    = msiBuilderSettings.CompanyName;
                var productWithEnv = msiBuilderSettings.ProductName + $"{envStringToShow}";

                Log.Logger.Debug(@"Product with env is: " + productWithEnv);

                var x64SqLite = new Feature("x64SqLite");
                var x86SqLite = new Feature("x86SqLite");

                //var exeFileShortcut1 = new ExeFileShortcut(productWithEnv,
                //    $@"%ProgramFiles%\\{companyName}\\{productWithEnv}\\JCI.ITC.SABPrice.UI.exe",
                //    "");
                var exeFileShortcut1 = new ExeFileShortcut(productWithEnv,
                                                           $@"[INSTALLDIR]\\" + msiBuilderSettings.UiExe,
                                                           "");
                var exeFileShortcut2 = new ExeFileShortcut($"Uninstall {productWithEnv}", "[System64Folder]msiexec.exe",
                                                           "/x [ProductCode]");
                var menuDir = new Dir(
                    $"%ProgramMenu%\\{companyName}\\{productWithEnv}",
                    exeFileShortcut1,
                    exeFileShortcut2);

                const string appIconName = "app_icon.ico";
                if (!File.Exists(appIconName))
                {
                    throw new ArgumentException("No app icon file found named : " + appIconName);
                }


                var msiPrefix = msiBuilderSettings.MsiPrefix;
                var project   = new Project(
                    $"{productWithEnv} {releaseNumber}",
                    new Dir(
                        $@"%ProgramFiles%\{companyName}\{productWithEnv}",
                        new Files(path + @"\*.*",
                                  f => !f.EndsWith(".pdb") && !f.EndsWith(".msi")
                                  )
                        //,new Files(x64SqLite, path + @"\x64\SQLite.Interop.dll")
                        //,new Files(x86SqLite, path + @"\x86\SQLite.Interop.dll")
                        ),
                    menuDir
                    )
                {
                    GUID                 = new Guid(guidString),
                    OutFileName          = $@".\{msiPrefix}{envStringToShow}.{releaseNumber}",
                    MajorUpgradeStrategy = MajorUpgradeStrategy.Default,
                    Version              = new Version(releaseNumber),
                    ControlPanelInfo     = { ProductIcon = appIconName }
                };

                var exe = project
                          .ResolveWildCards()
                          .FindFile(f => f.Name.EndsWith(uiExe))
                          .First();

                exe.Shortcuts = new[]
                {
                    new FileShortcut(productWithEnv, "%Desktop%")
                };

                project.Version = new Version(releaseNumber);

                project.ControlPanelInfo.Comments        = productWithEnv;
                project.ControlPanelInfo.Readme          = "https://jci.com/";
                project.ControlPanelInfo.HelpLink        = "https://jci.com/";
                project.ControlPanelInfo.HelpTelephone   = "(+45) 6170 8335";
                project.ControlPanelInfo.UrlInfoAbout    = "https://jci.com/";
                project.ControlPanelInfo.UrlUpdateInfo   = "https://jci.com/";
                project.ControlPanelInfo.ProductIcon     = appIconName;
                project.ControlPanelInfo.Contact         = "*****@*****.**";
                project.ControlPanelInfo.Manufacturer    = "Sabroe Factory by Johnson Controls";
                project.ControlPanelInfo.InstallLocation = "[INSTALLDIR]";
                project.ControlPanelInfo.NoModify        = true;
                //project.ControlPanelInfo.NoRepair = true,
                //project.ControlPanelInfo.NoRemove = true,
                //project.ControlPanelInfo.SystemComponent = true, //if set will not be shown in Control Panel


                project.BannerImage     = "TopBanner.bmp";
                project.BackgroundImage = "MainPage.bmp";

                Log.Logger.Debug(@"BuildMSI ");
                Compiler.BuildMsi(project);

                Log.Logger.Debug(@"Succesfully created ");
                Log.Logger.Debug(project.Name);
            }
            catch (Exception e)
            {
                Log.Logger.Error(e, "During Setup / MSI creation.");
                Environment.ExitCode = 1;
                throw;
            }
        }