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); }
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("εε»Ίζε"); }