예제 #1
0
        /// <summary>
        /// Generates a wxs file for use by wix.
        /// </summary>
        /// <param name="args">
        ///  CMD.EXE: SimpleWix.exe [SourceFolder] [AddInName] [AddInVersion] [RevitVersions] [UpgradeCode]
        ///
        /// SourceFolder:   The folder to build from. This will be the equivalent of the Autodesk\Revit\Addins\YYYY\ folder. e.g. "C:\repos\Interior Partition Tools\bin"
        ///
        /// AddInName:      The name of your addin e.g. "Interior Partition Tools"
        ///
        /// AddInVersion:   The version of your addin e.g. "0.0.0.1"
        ///
        /// RevitVersions:  The revit versions to build for, separated by a "-", e.g. "2017-2018-2019"
        ///
        /// UpgradeCode:    A GUID for your product. This essentially identifies your product as what it is, and let's the
        ///                 installer know to uninstall previous versions. If this changes your installer *will not* uninstall the previous
        ///                 version before installing this one. e.g. "ANY-VALID-GUID"
        /// </param>
        static void Main(string[] args)
        {
            try
            {
                if (args.Length > 0)
                {
                    if (args[0].ToLower() == "init")
                    {
                        RunInit();
                        return;
                    }
                }
                Manifest inputs = InputResult.GetManifest(args);
                QuietMode = inputs?.quietmode ?? false;

                Console.WriteLine(inputs.Print());
                //Console.ReadKey();
                ValidateManifest(inputs);


                printTitle(inputs);
                if (!QuietMode)
                {
                    Console.WriteLine("Press any key to continue: ...");
                    Console.ReadKey();
                }

                var fs = InputConverter.ConvertManifestToFileSystem(inputs.features);
                //Console.WriteLine(fs.Print());
                var wix = WixConverter.ConvertFileSystem(fs, inputs.upgradecode, inputs.appname, inputs.version, inputs.icon,
                                                         inputs.manufacturer, inputs.panel, inputs.banner, inputs.license);

                List <string> outPut = wix.Print(0);
                outPut.Insert(0, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

                using (StreamWriter wr = new StreamWriter(inputs.outputfile))
                {
                    foreach (string s in outPut)
                    {
                        wr.WriteLine(s);
                    }
                    // xs.Serialize(wr, targetDir);
                }

                using (StreamReader sr = new StreamReader(inputs.outputfile))
                {
                    while (sr.Peek() >= 0)
                    {
                        sr.ReadLine();
                        //Console.WriteLine(sr.ReadLine());
                    }
                }
                int x = 0;


                Console.WriteLine("XML WixFile Succesfully Saved To: " + inputs.outputfile);

                Console.WriteLine("");
                Console.WriteLine("");
                if (inputs.complete ?? false)
                {
                    var dir = Path.GetDirectoryName(inputs.outputfile);
                    PrintDir(dir);
                    var candlePath = FindCandlePath();
                    var wixobj     = "\"" + inputs.outputfile.Replace(".wxs", ".wixobj") + "\"";
                    Console.WriteLine(RunProcessAndWaitForOutput(candlePath, "\"" + inputs.outputfile + "\"" + " -out " + wixobj));
                    PrintDir(dir);

                    Console.WriteLine("");
                    Console.WriteLine("");
                    var msi       = wixobj.Replace(".wixobj", ".msi");
                    var lightPath = FindLightPath();
                    Console.Write(RunProcessAndWaitForOutput(lightPath, "-ext WixUIExtension " + wixobj + " -sice:ICE91" + " -out " + msi));
                    PrintDir(dir);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("An unexpected error occurred:" + Environment.NewLine + e.ToString());
                if (!QuietMode)
                {
                    Console.WriteLine();
                    Console.WriteLine("Press any key to exit ...");
                    Console.ReadKey();
                }
                Environment.Exit(1);
            }

            if (!QuietMode)
            {
                Console.WriteLine();
                Console.WriteLine("Press any key to exit ...");
                Console.ReadKey();
            }

            Console.WriteLine("Now exiting, goodbye.");
        }