private RevitAddInManifest GetCurrentManifest(string fullPathDll, AddInId addInId)
        {
            var dirPath = Path.GetDirectoryName(fullPathDll);
            //var manifestPath = Path.Combine(dirPath, addinFileName);
            var addins = AddInManifestUtility.GetRevitAddInManifests(dirPath, new Dictionary <string, string>());

            if (addins == null || addins.Count == 0)
            {
                return(null);
            }

            RevitAddInManifest searchedAddin = null;

            foreach (var addin in addins)
            {
                foreach (var command in addin.AddInCommands)
                {
                    var cmdId = command.AddInId;
                    if (cmdId.Equals(addInId.GetGUID()) == false)
                    {
                        continue;
                    }

                    searchedAddin = addin;
                    break;
                }

                if (searchedAddin != null)
                {
                    break;
                }
            }
            //return AddInManifestUtility.GetRevitAddInManifest(manifestPath);
            return(searchedAddin is null ? new RevitAddInManifest() : searchedAddin);
        }
Example #2
0
        public static bool Install()
        {
            if (RevitProductUtility.GetAllInstalledRevitProducts().Count == 0)
            {
                return(false);
            }

            foreach (var product in RevitProductUtility.GetAllInstalledRevitProducts())
            {
                if (product.Version == RevitVersion.Unknown)
                {
                    continue;
                }
                var addinFile  = product.CurrentUserAddInFolder + "\\rubyshell.addin";
                var pluginFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + string.Format("\\RevitRubyShell{0}.dll", product.Version);
                var manifest   = File.Exists(addinFile) ? AddInManifestUtility.GetRevitAddInManifest(addinFile) : new RevitAddInManifest();

                if (!File.Exists(pluginFile))
                {
                    MessageBox.Show(string.Format("{0} is not supported by this version of RevitRubyShell", product.Version), "RevitRubyShell", MessageBoxButton.OK, MessageBoxImage.Error);
                    continue;
                }

                //Search manifest for app
                RevitAddInApplication app = null;
                foreach (var a in manifest.AddInApplications)
                {
                    if (a.AddInId == AppGuid)
                    {
                        app = a;
                    }
                }

                if (app == null)
                {
                    app = new RevitAddInApplication("RevitRubyShell", pluginFile, AppGuid, AppClass, "NOSYK");
                    manifest.AddInApplications.Add(app);
                }
                else
                {
                    app.Assembly      = pluginFile;
                    app.FullClassName = AppClass;
                }

                if (manifest.Name == null)
                {
                    manifest.SaveAs(addinFile);
                }
                else
                {
                    manifest.Save();
                }

                MessageBox.Show(string.Format("RevitRubyShell for {0} was successully installed ", product.Version), "RevitRubyShell");
            }

            return(true);
        }
        public static string CreateManifest(string addinName, string version, AddInCmdInfo cmdInfo, AddInAppInfo appInfo)
        {
            string manifestFilePath = string.Format("{0}\\{1}\\{2}.addin", SystemVariables.RevitProgramDataPath, version, addinName);

            try {
                RevitAddInManifest revitAddInManifest = AddInManifestUtility.GetRevitAddInManifest(manifestFilePath);

                var cmds = revitAddInManifest.AddInCommands;
                var apps = revitAddInManifest.AddInApplications;

                for (int i = 0; i < cmds.Count; i++)
                {
                    var cmd = cmds[i];
                    if (cmd.AddInId.ToString() != cmdInfo.AddInId)
                    {
                        revitAddInManifest.AddInCommands.Add(CreateRevitAddInCmd(cmdInfo));
                    }
                    else
                    {
                        cmd.VendorId          = cmdInfo.VendorId;
                        cmd.VendorDescription = cmdInfo.VendorDescription;
                        cmd.Description       = cmdInfo.Description;
                        cmd.Text                         = cmdInfo.Text;
                        cmd.FullClassName                = cmdInfo.FullClassName;
                        cmd.Discipline                   = cmdInfo.Discipline;
                        cmd.VisibilityMode               = cmdInfo.VisibilityMode;
                        cmd.AvailabilityClassName        = cmdInfo.AvailabilityClassName;
                        cmd.AllowLoadIntoExistingSession = cmdInfo.AllowLoadIntoExistingSession;
                    }
                }

                for (int i = 0; i < apps.Count; i++)
                {
                    var app = apps[i];
                    if (app.AddInId.ToString() != appInfo.AddInId)
                    {
                        revitAddInManifest.AddInApplications.Add(CreateRevitAddInApp(appInfo));
                    }
                    else
                    {
                        app.Name                         = appInfo.Name;
                        app.VendorId                     = appInfo.VendorId;
                        app.VendorDescription            = appInfo.VendorDescription;
                        app.FullClassName                = appInfo.FullClassName;
                        app.AllowLoadIntoExistingSession = appInfo.AllowLoadIntoExistingSession;
                    }
                }
                revitAddInManifest.Save();
            }
            catch {
                try {
                    RevitAddInManifest manifest = new RevitAddInManifest();

                    if (cmdInfo != null)
                    {
                        RevitAddInCommand myCmd = CreateRevitAddInCmd(cmdInfo);
                        manifest.AddInCommands.Add(myCmd);
                    }

                    if (appInfo != null)
                    {
                        RevitAddInApplication myApp = CreateRevitAddInApp(appInfo);
                        manifest.AddInApplications.Add(myApp);
                    }

                    //RevitProduct newRevitProduct = RevitProductUtility.GetAllInstalledRevitProducts()[0];
                    //string manifestFilePath = string.Format("{0}\\{1}", newRevitProduct.AllUsersAddInFolder, addinName);
                    manifest.SaveAs(manifestFilePath);
                }
                catch (Exception ex) {
                    return(ex.Message);
                }
            }

            return("εˆ›ε»ΊζˆεŠŸ");
        }