public static void PostFailure(Document document, IEnumerable<Exception> exceptions)
        {
            var log = new ExceptionLog();
            log.Add(exceptions);
            log.SaveToFile(Paths.ErrorFile);

            var msg = new FailureMessage(GeneralFailure);
            document.PostFailure(msg);
        }
        private static void Main(string[] args)
        {
            try
            {
                //create a new addin manifest
                var manifest = new RevitAddInManifest();
            #if Revit2015
                var revitProduct =
                    RevitProductUtility.GetAllInstalledRevitProducts()
                        .FirstOrDefault(p => p.Version == RevitVersion.Revit2015);
                const string revitVersion = "Revit 2015";
            #elif Revit2016
                var revitProduct = RevitProductUtility.GetAllInstalledRevitProducts()
                    .FirstOrDefault(p => p.Version == RevitVersion.Revit2016);
                const string revitVersion = "Revit 2016";
            #endif

                if (revitProduct != null)
                {
                    var addinPath = Path.Combine(revitProduct.AllUsersAddInFolder, "CzechBimLibrary.addin");

                    //uninstall option - delete addin file
                    if (args.FirstOrDefault() == "-u")
                    {
                        if (File.Exists(addinPath))
                            File.Delete(addinPath);
                    }
                    //install addin - create addin file and save it to register the addin
                    else
                    {
                        var location = typeof (DummyReference).Assembly.Location;
                        //create an external application
                        var id = new Guid("936A5434-1A11-484C-BFE3-A310658180B1");
                        var application = new RevitAddInApplication("BimLibraryApplication", location, id,
                            "BimLibraryAddin.AddInApplication", "ADSK");
                        //add both command(s) and application(s) into manifest
                        manifest.AddInApplications.Add(application);
                        //save manifest to a file
                        manifest.SaveAs(addinPath);

                        //delete shared parameter file for the case its structure has been changed
                        //if (File.Exists(Paths.SharedParamFile))
                        //    File.Delete(Paths.SharedParamFile);
                    }
                }
                else
                {
                    if (args.FirstOrDefault() != "-u")
                    {
                        MessageBox.Show(
                            "There is no " + revitVersion +
                            " installed on your machine. Run this again after you have Revit installed.",
                            "Message",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(
                    "There was an error during registration of the Add-in. Tool functionality will be affected.",
                    "Message",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
            #if DEBUG
                var log = new ExceptionLog();
                log.Add(e);
                string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                path = Path.Combine(path, "RevitExceptions.xml");
                log.SaveToFile(path);
            #endif
            }
        }