public static DynamoProducts FindDynamoInstallations(string debugPath = null, IProductLookUp lookUp = null) { var products = new DynamoProducts(debugPath); products.LookUpAndInitProducts(lookUp ?? new InstalledProductLookUp("Dynamo", "*DynamoCore.dll")); return(products); }
/// <summary> /// Creates DynamoAddinData to generate addin for given Revit product /// based on latest Dynamo installed on the system. /// </summary> /// <param name="revit">Revit Product for which addin to be generated </param> /// <param name="dynamos">Dynamo products installed on the system</param> /// <param name="dynamoUninstallPath">dynamo path being uninstalled, can be /// null or empty string</param> /// <returns>DynamoAddinData</returns> public static DynamoAddinData Create(IRevitProduct revit, DynamoProducts dynamos, string dynamoUninstallPath) { //Iterate in reverse order to find the first dynamo that is supported for //this revit product var products = dynamos.Products.Reverse(); foreach (var p in products) { //If the current product is being uninstalled, don't generate addin data if (DynamoInstall.PathEquals(p.InstallLocation, dynamoUninstallPath)) { continue; } var path = Path.Combine(p.InstallLocation, "DynamoRevit.dll"); //Should be 0.6.3 only supported for Revit2014 if (File.Exists(path) && revit.VersionString == "Revit2014") { return(new DynamoAddinData(revit, new DynamoInstall(p.InstallLocation))); } var subfolder = revit.VersionString.Insert(5, "_"); path = Path.Combine(p.InstallLocation, subfolder, "DynamoRevitVersionSelector.dll"); if (File.Exists(path)) { return(new DynamoAddinData(revit, new DynamoInstall(p.InstallLocation))); } } return(null); }
static void Main(string[] args) { bool uninstall = false; foreach (string s in args) { if (s == @"/uninstall") { uninstall = true; } else if (Directory.Exists(s)) { debugPath = s; } } if (uninstall && string.IsNullOrEmpty(debugPath)) { //just use the executing assembly location var assemblyPath = Assembly.GetExecutingAssembly().Location; debugPath = Path.GetDirectoryName(assemblyPath); } var allProducts = RevitProductUtility.GetAllInstalledRevitProducts(); var prodCollection = new RevitProductCollection(allProducts.Select(x => new DynamoRevitProduct(x))); if (!prodCollection.Products.Any()) { Console.WriteLine("There were no Revit products found."); return; } var dynamos = DynamoProducts.FindDynamoInstallations(debugPath); if (!dynamos.Products.Any()) { Console.WriteLine("No Dynamo installation found at {0}.", debugPath); DeleteExistingAddins(prodCollection); return; } DeleteExistingAddins(prodCollection); if (uninstall) { GenerateAddins(prodCollection, debugPath); } else { GenerateAddins(prodCollection); } }
/// <summary> /// Generate new addin files for all applicable /// versions of Revit. /// </summary> /// <param name="products">A collection of revit installs.</param> /// <param name="dynamos">DynamoProducts, a collection of installed Dynamo /// on this system.</param> /// <param name="dynamoUninstallPath">Path of Dynamo being uninstalled</param> internal static void GenerateAddins(IRevitProductCollection products, DynamoProducts dynamos, string dynamoUninstallPath = "") { foreach (var prod in products.Products) { Console.WriteLine("Generating addins in {0}", prod.AddinsFolder); var addinData = DynamoAddinData.Create(prod, dynamos, dynamoUninstallPath); if (null != addinData) { GenerateDynamoAddin(addinData); } } }
/// <summary> /// Finds all Dynamo installations on the system by looking at registry /// and install directories, and ensuring that it contains DynamoCore. /// </summary> /// <returns>List of IDynamoInstall</returns> public static IEnumerable <IDynamoInstall> FindDynamoInstalls(string debugPath) { var dynamos = DynamoProducts.FindDynamoInstallations(debugPath); foreach (IInstalledProduct product in dynamos.Products) { string[] files = Directory.GetFiles(product.InstallLocation, "DynamoRevit*.dll"); string[] dirs = Directory.GetDirectories(product.InstallLocation, "Revit*"); if (dirs.Any() || files.Any()) { yield return(new DynamoInstall(product.InstallLocation)); } } }
public void DynamoProductsOverrideWithDebugPath() { const string myPath = @"C:\MyXYZ\"; const string dyn063 = @"C:\Autodesk\Dynamo\Core"; var products = new Dictionary <string, Tuple <int, int, int, int> > { { "A", Tuple.Create(0, 1, 2, 3) }, { "B", Tuple.Create(0, 1, 3, 4) }, { "C", Tuple.Create(0, 8, 2, 4) }, { "D", Tuple.Create(1, 0, 3, 4) }, { "E", null } }; var locations = new Dictionary <string, Tuple <int, int, int, int> > { { myPath, Tuple.Create(0, 8, 2, 3) }, { dyn063, Tuple.Create(0, 6, 3, 4242) }, }; var lookUp = SetUpProductLookUp(products, locations); var p = DynamoProducts.FindDynamoInstallations(myPath, lookUp); Assert.AreEqual("D", p.GetLatestProduct().ProductName); Assert.AreEqual("1.0.3.4", p.GetLatestProduct().VersionString); Assert.AreEqual(5, p.Products.Count()); //Product C is dropped because myPath with same version is provided. Assert.IsFalse(p.Products.Any(x => x.ProductName == "C")); //Find product name starting with "XYZ", name given for lookup var prods = p.Products.Where(x => x.ProductName.StartsWith("XYZ")); var prod063 = prods.First(); var prod082 = prods.Last(); Assert.AreEqual(2, prods.Count()); Assert.AreEqual(dyn063, prod063.InstallLocation); Assert.AreEqual("XYZ 0.6", prod063.ProductName); Assert.AreEqual("0.6.3.4242", prod063.VersionString); Assert.AreEqual(myPath, prod082.InstallLocation); Assert.AreEqual("XYZ 0.8", prod082.ProductName); Assert.AreEqual("0.8.2.3", prod082.VersionString); }