通过RevitAddInUtility.dll提供的方法,我们很容易获取到一些本地Revit安装的信息,比如安装的版本,安装路径,和插件配置文件所在的文件夹等。

但如果你对代码有洁癖,觉得为了这么点事儿,没必要去引用一个外部Dll。或者其他别的什么原因都可以,导致不想去引用

RevitAddInUtility.dll这个类库,同时又想获取到Revit安装的相关信息怎么办呢?我们可以通过读取注册表来获取我们想要的信息。

Revit安装信息,在注册表中按如下键值存放。

我给出了一种获取Revit安装信息的方法。其中包括两个类,存放Revit安装信息的RevitItem类,和构建RevitItem信息的RevitManager类。如果有需要的话可以直接拷贝到项目中,直接运行即可

RevitItem类

    /// <summary>/// Revit安装信息/// </summary>public class RevitItem{internal RevitItem(string name,string revitFile){Name = name;RevitFile = revitFile;AllUsersAddInFolder = RevitManager.GetAllUsersAddInFolder(name);CurrentUserAddInFolder= RevitManager.GetCurrentUserAddInFolder(name);}/// <summary>/// Revit名称(2018,2019)/// </summary>public string Name { get; private set; }/// <summary>/// revit.exe所在位置/// </summary>public string RevitFile { get;private set; }/// <summary>/// 所有用户插件目录/// </summary>public string AllUsersAddInFolder { get; private set; }/// <summary>/// 当前用户插件目录/// </summary>public string CurrentUserAddInFolder { get; private set; }}

RevitManager类

    /// <summary>/// revit相关管理/// </summary>public  class RevitManager{#region 私有设置private const string RevitNameMatch = @"^20\d{2}$";private const string ExeName = "Revit.exe";private static Dictionary<string, RevitItem> m_DicRevitItems = new Dictionary<string, RevitItem>();static RevitManager(){LoadRevitItems();}/// <summary>/// 初始化所有安装revit项目/// </summary>private static void LoadRevitItems(){List<RevitItem> revitItems = new List<RevitItem>();string baseKey = string.Format("SOFTWARE\\Autodesk\\Revit");//LocalMachine key值var useRegistryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;var localMachineKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, useRegistryView);#region 查找注册表安装路径using (RegistryKey registryKey = localMachineKey.OpenSubKey(baseKey)){if (registryKey != null){//找到形如(2018,2019)的键值var revitVersions = registryKey.GetSubKeyNames().Where(n => CheckRevitName(n)).ToList();foreach (var version in revitVersions){var versionKey = registryKey.OpenSubKey(version);//找到包含REVIT名称的键值var subKeyName = versionKey.GetSubKeyNames().FirstOrDefault(n => n.ToUpper().StartsWith("REVIT"));if (string.IsNullOrWhiteSpace(subKeyName)){continue;}var tempKey = versionKey.OpenSubKey(subKeyName);if (tempKey != null){#region 初始化RevitItemvar installationLocation = tempKey.GetValue("InstallationLocation") as string ?? string.Empty;var revitFile = Path.Combine(installationLocation, ExeName);if (File.Exists(revitFile)){RevitItem item = new RevitItem(version, revitFile);revitItems.Add(item);}#endregion}}registryKey.Close();}} #endregionrevitItems.ForEach(revit => m_DicRevitItems[revit.Name]=revit);}#endregion/// <summary>/// 获取所有Revit项目/// </summary>/// <returns></returns>public static List<RevitItem> GetRevitItems(){return m_DicRevitItems.Values.ToList();}/// <summary>/// 获取指定名称的Revit项目/// </summary>/// <param name="revitName"></param>/// <returns></returns>public static RevitItem GetRevitItem(string revitName){m_DicRevitItems.TryGetValue(revitName, out RevitItem revitItem);return revitItem;}/// <summary>/// 检查Revit名称格式是否正确/// </summary>/// <param name="revitName"></param>/// <returns></returns>public static bool CheckRevitName(string revitName){return Regex.IsMatch(revitName, RevitNameMatch);}/// <summary>/// 获取插件放置公共目录/// </summary>/// <param name="revitItemName"></param>/// <returns></returns>public static string GetAllUsersAddInFolder(string revitItemName){return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Autodesk\Revit\AddIns", revitItemName);}/// <summary>/// 获取插件放置当前用户目录/// </summary>/// <param name="revitItemName"></param>/// <returns></returns>public static string GetCurrentUserAddInFolder(string revitItemName){return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Autodesk\Revit\AddIns", revitItemName);}}

使用的话直接调用var items = RevitManager.GetRevitItems();即可。

Revit获取安装路径,零依赖Revit提供的dll相关推荐

  1. Visual Studio 2017C#打包应用程序详细教程,重写安装类获取安装路径,附加各种奇葩问题描述

    前言 C#写好一个应用程序,总想分享给自己的朋友或者上架,然而被困在打包之外,这次为大家带来近期我的经验,经过几天的摸索,发现网上的教程并不全面,会给初学者带来很多疑问,这里将做些问题描述与解答. / ...

  2. 微信多开批处理(自动获取安装路径)

    使用该脚本需要具备2个条件 1.已经安装好微信 2.微信的快捷方式放到桌面 @echo offrem 多开之前先关闭所有微信进程 taskkill /F /IM WeChat.exe /T >n ...

  3. Revit server安装配置

    不同版本的revit要安装对应版本的revit server ,而且同一服务器中可以安装多个版本的revit server Revit server 无需注册,可到官网下载 如何安装和配置 Revit ...

  4. Revit二次开发环境搭建(Revit 2020+Visual Studio 2019)

    目录 Revit二次开发环境搭建(Revit 2020+Visual Studio 2019)准备内容 安装 Revit 2020 的安装 Visual Studio 2019 的安装 Revit S ...

  5. 获取Revit安装版本信息及安装路径

    通过Revit卸载注册表信息.注册表路径如下: 原获取方式:通过Revit卸载注册表获取安装目录.(实践发现Revit安装成功后,卸载注册表信息不存在现象) HKEY_LOCAL_MACHINE\SO ...

  6. Revit 2022安装教程(附详细安装步骤+激活教程)

    Revit 2022不得不说,拥有着简洁.易上手的操作界面,就算你是第一次使用,也会对这款软件抱有很大的好感,不过居然有人不会安装,我也是醉了,半夜起来给大家写了个Revit 2022安装教程,有需要 ...

  7. java安装_使用Java 9模块化来发布零依赖本机应用程序

    java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...

  8. Inno Setup覆盖安装前执行卸载、获取原安装路径

    分享下目前用到的一个简单的 Inno Setup 安装包制作脚本: 主要功能有3个: 安装前检测是否已安装,如果是覆盖安装则提示是否先进行卸载(程序卸载时不会自动卸载打包列表外的文件,目前没有进行历史 ...

  9. python查看包的路径_获取python及三方包的版本,安装路径等信息

    #coding:utf-8 #yys #1.1________获取python的版本号信息________ import sys python_version1=sys.version python_ ...

最新文章

  1. tomcat server.xml中文版
  2. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数
  3. Hibernate提供的内置标识符生成器
  4. Windows 如何在命令终端(CMD)使用命令来访问本地/远程的 Oracle 数据库呢?
  5. 组合数学 —— 组合数
  6. Matlab 中prod函数的使用
  7. 一加8系列获得认证:骁龙865加持 离上市又近一步
  8. 干货:实现数据可视化的几个工具选择(工具+编程语言)
  9. 【学生个人网页设计作品】使用HMTL制作一个超好看的保护海豚动物网页
  10. python实现LU分解与LUP分解
  11. 【未来iPhone 手机中将加入卫星通信功能?】
  12. 慕容垂:百万战骨风云里——激荡的鲜卑史略之一(转载)
  13. Error: Couldn‘t find preset “stage-2“ relative to directory
  14. python爬虫——链家苏州成交房价2
  15. ImageMagick将多张图片拼接成一张图片_word转存技巧:如何将每页文档转换为图片保存?...
  16. DDR扫盲——DDR与DDR2、DDR3的区别
  17. MYSQL JDBC图书管理系统
  18. c#方向联蔚数科一面面经
  19. 文献阅读:SimCSE:Simple Contrastive Learning of Sentence Embeddings
  20. Java+OpenCV实现图片中的人脸识别

热门文章

  1. 什么是SSH与SSH客户端
  2. 网吧可以用瘦终端加服务器么,带机量:100台的两种无盘网吧服务器配置方案,比较下...
  3. 《工作前5年,决定你一生的财富》三公子TXT,PDF,epub,mobi,azw3,kindle电子书下载
  4. 手机全部零件名称图片_【话题】手机维修师如何看待自己带零件来修的人
  5. 怎么在接口自动化中加入Try
  6. java drawimage 缩放_java drawImage 如何实现旋转和缩放
  7. 机器学习实战-决策树算法
  8. mysql经纬度距离计算 按距离排序
  9. 企业级KVM虚拟化+oVirt私有云平台建设实践
  10. Ir(II)配合物金属-配体电荷转移(3MLCT)激发态)