using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using Autodesk.RevitAddIns; using SAGY.DotNetUtils; namespace SAGY.Revit.RevitInfo { public static class RevitStartHelper { private const string AddInFormat = "\r\n\r\n\r\n{0}\r\n{1}\r\n{2}\r\n{3}\r\n{4}\r\n上格云技术, www.sagacloud.cn\r\n\r\n"; /// /// 启动完成后删除Addin文件 /// /// /// /// /// public static bool ClearAddInFile(Guid addInId, string strProductType, string strRevitVersion) { try { RevitVersionExt ext; ProductType unknown = ProductType.Unknown; string str7 = strProductType; if (str7 != null) { if (!(str7 == "Revit")) { if (str7 == "Architecture") { goto Label_0054; } if (str7 == "Structure") { goto Label_0058; } if (str7 == "MEP") { goto Label_005C; } if (str7 == "Unknown") { goto Label_0060; } } else { unknown = ProductType.Revit; } } goto Label_0062; Label_0054: unknown = ProductType.Architecture; goto Label_0062; Label_0058: unknown = ProductType.Structure; goto Label_0062; Label_005C: unknown = ProductType.MEP; goto Label_0062; Label_0060: unknown = ProductType.Unknown; Label_0062: ext = GetRevitVersion(strRevitVersion); if ((unknown == ProductType.Unknown) || (ext == RevitVersionExt.Unknown)) { return false; } //获取所有安装过的Revit版本 List allInstalledRevitProducts = RevitProductUtility.GetAllInstalledRevitProducts(); if ((allInstalledRevitProducts == null) || (allInstalledRevitProducts.Count <= 0)) { return false; } RevitProduct product = null; foreach (RevitProduct product2 in allInstalledRevitProducts) { if ((product2.Product == unknown) && (product2.Version == ((RevitVersion) ((int) ext)))) { product = product2; break; } } if (product != null) { string currentUserAddInFolder = product.CurrentUserAddInFolder; string allUsersAddInFolder = product.AllUsersAddInFolder; string str4 = GetTszPoductString(addInId.ToString()) + ".addin"; string[] strArray = new string[] { currentUserAddInFolder, allUsersAddInFolder }; foreach (string str5 in strArray) { if ((str5 != null) && (str5.Trim().Length > 0)) { string path = Path.Combine(str5, str4); if (File.Exists(path)) { try { File.Delete(path); } catch { } } } } } return true; } catch { return false; } } /// /// AddIn内部文件赋值 /// /// /// /// public static string GetAddInFormatString(string strFormat, string strAddInId) { string str = "上格云技术"; string str2 = "SAGY.RevitMenu.MenuApp"; string str3 = "SAGY"; string revitMenuDll = GetRevitMenuDll(); return string.Format(strFormat, new object[] { str, revitMenuDll, strAddInId, str2, str3 }); } /// /// 获取Revit启动加载dll的路径 /// /// public static string GetRevitMenuDll() { return Path.Combine(Path.Combine(AppBaseInfo.AppRunPath, "OutputDll"), "SAGY.RevitMenu.dll"); } /// /// 获取已安装的Revit版本信息 /// /// public static List GetRevitProductExts() { List list = new List(); foreach (RevitProduct product in RevitProductUtility.GetAllInstalledRevitProducts()) { list.Add(new Revit.RevitInfo.RevitProductExt(product)); } return list; } /// /// 由R18获取Revit版本信息 /// /// /// public static Revit.RevitInfo.RevitProductExt GetRevitProductVer(string strVer) { RevitProduct rp = null; RevitVersionExt versionExt = GetRevitVersion2(strVer); List revitProductExts = GetRevitProductExts(); Revit.RevitInfo.RevitProductExt revitProductExt = revitProductExts.FirstOrDefault(t => t.Version.ToInt() == (int)versionExt); return revitProductExt; } /// /// 2018 转化为RevitVersionExt.Revit2018 /// /// /// public static RevitVersionExt GetRevitVersion(string strVersionNumber) { RevitVersionExt result = RevitVersionExt.Unknown; if (strVersionNumber == null) { return result; } string str = strVersionNumber; int versionInt = str.ToInt(); int rvInt = versionInt - 2010; try { result = (RevitVersionExt) rvInt; } catch { //强转失败 result=RevitVersionExt.Unknown; } return result; } /// /// R18 转化为RevitVersionExt.Revit2018 /// /// /// public static RevitVersionExt GetRevitVersion2(string strVersionNumber) { RevitVersionExt result = RevitVersionExt.Unknown; if (strVersionNumber == null) { return result; } //R18 string str = strVersionNumber.Substring(1); //18 int versionInt = str.ToInt(); int rvInt = versionInt - 10; try { result = (RevitVersionExt)rvInt; } catch { //强转失败 result = RevitVersionExt.Unknown; } return result; } /// /// 获取AddIn文件的名称 /// /// /// public static string GetTszPoductString(string strAddInId) { string str2; string str = ""; //if (((str2 = strAddInId.ToUpper()) != null) && (str2 == "EABBE53F-04A0-4D10-905F-FE4DB67E1F3C")) //{ // str = "TSBIM"; //} str = "SAGABIM"; return str; } [DllImport("shell32.dll")] public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int fsShowCmd); public static bool StartRevit(Revit.RevitInfo.RevitProductExt prodInfo, List listTszProg) { try { string currentUserAddInFolder = prodInfo.CurrentUserAddInFolder; string allUsersAddInFolder = prodInfo.AllUsersAddInFolder; string[] strArray = new string[] { currentUserAddInFolder }; //foreach (string str3 in listTszProg) { string str3 = "EABBE53F-04A0-4D10-905F-FE4DB67E1F3C";//addinid,后期可根据需要修改 string str5 = GetTszPoductString(str3) + ".addin"; foreach (string str6 in strArray) { if ((str6 != null) && (str6.Trim().Length > 0)) { string path = Path.Combine(str6, str5); string str8 = Path.Combine(allUsersAddInFolder, str5); try { if (!Directory.Exists(str6)) { Directory.CreateDirectory(str6); } if (File.Exists(path)) { File.Delete(path); } if (File.Exists(str8)) { File.Delete(str8); } } catch { } using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8)) { string addInFormatString = GetAddInFormatString(AddInFormat, str3); if (!string.IsNullOrEmpty(addInFormatString)) { writer.Write(addInFormatString); } else { MessageShowBase.Infomation("初始化Revit加载信息错误"); return false; } } } } } string directoryName = Path.GetDirectoryName(prodInfo.RevitExeFile); return (ShellExecute(IntPtr.Zero, new StringBuilder("open"), new StringBuilder("Revit"), new StringBuilder(""), new StringBuilder(directoryName), 1) > 0x20); } catch (Exception exception) { MessageShowBase.Infomation("配置Revit加载文件失败,请以管理员登录或在控制面板中“更改UAC设置”。"); MessageShowBase.Show(exception); return false; } } } }